【Django Series - 01】以前用 1.6.11,最近用 1.10.8,現在又想換最新版本 2.1.2(探索中...)

Django Series(Django2.1.2 + Anaconda3)

(一)安裝並配置 Django 環境 ||| 基於 Django 進行 Web 開發

(二)Django 基礎知識:語法、教程

(三)用戶管理模塊:創建用戶、登錄、退出

(四)數據的增刪改:用戶提交數據,驗證數據的有效性並傳輸至後臺(jQuery.post、jQuery.getJSON)

(五)基於 "xlsxwriter  + BytesIO"(Python3)生成 Excel 報表 ||| Python2 StringIO.StringIO()


說明:本系列教程根據最近實踐過程進行整理、總結和分享。由於時間和精力有限,發表時內容分析部分可能不是很完整,後續有時間會慢慢補充。同時!!也希望感興趣的同學可以提出一些細節問題和建議,我會根據這些問題進一步整理和完善哈。

更新日誌:

20181012:整理第一版,開始探索 Django1.10.8,並整理博文;

20181013:拋棄了使用不久的 1.10.8 版本,轉而使用 Django2.1.2 + Anaconda3,又是遇到一大推細節問題;

20181019:歸類於【Django Series】,主要是這篇博文的參考資料有歸納了之前關於 Django 的相關博文;


相關資源:

  • Django 1.6.11 + Python2
  • Django 1.10.8 + Anaconda2
  • Django 2.1.2 + Anaconda3

最近剛嘗試使用 Django 1.10.8,很多內容還在學習中。嘗試了 Django 1.10.8 一段時間,感覺還ok啦。不過最近閱讀了 Django 官網文檔(https://www.djangoproject.com/start/overview/),得知 Django 1.11及以後的版本只支持 Python3,而團隊也建議使用 Python3 進行開發,畢竟後續應該是個趨勢了。想來想去,最終還是決定拋棄使用不久的 Django 1.10.8,開始嘗試使用最新版本的 Django 2.1.2 + Anaconda3。又是一段漫長的探索...

參考資料:

基本操作步驟:

  1. 安裝 python 和 django,並配置環境變量;
  2. 將 django-admin.py 文件複製到目錄 A(A表示你想在該目錄下創建項目);
  3. 輸入【 python django-admin.py startproject project_name 】創建項目;此時在目錄 project_name 下會生成 manage.py;
  4. 輸入【 python .\manage.py runserver 127.0.0.1:8000 】運行本地IP,跑起項目;此時即可選擇瀏覽器,輸入網址  http://127.0.0.1:8000/ 打開網頁;
  5. 輸入【 python .\manage.py startapp appName 】創建app項目,並進行如下配置:
    1. 手動添加urls.py;
    2. 配置【setting.py】,包括appName、templates、static等(後續的數據庫類型也是在這裏配置);
    3. 理解每個appName下的urls.py和projectName目錄下的urls.py的關係,比進行配置;
    4. 編寫appName目錄下的【views.py】,返回變量和具體網頁;
  6. 創建數據庫
    1. django 1.10.8版本:輸入【python manage.py migrate】
    2. django 1.6.11版本:輸入【 python .\manage.py sycndb 】

查看 django 版本

## way-1
>>> import django
>>> print django.VERSION # Python2的格式
>>> print(django.VERSION) # Python3的格式

## way-2
python -m django --version ## 直接在終端輸入

Django 2.1.2

difference:

## 1.6.11

## 1.10.8
urlpatterns = [
	url(r'^$', views.Home_ManageSystem, name='Home_ManageSystem'),
    url(r'^admin/', include(admin.site.urls)),
]

## 2.1.2
urlpatterns = [
    path(r'^$', views.Home_ManageSystem, name='Home_ManageSystem'),
    path('admin/', admin.site.urls),
]

# app_name = 'app_ManageSystem'
# https://docs.djangoproject.com/en/1.9/intro/tutorial03/#namespacing-url-names

Django 2.1.2:登錄默認界面 http://127.0.0.1:8000/

problems:

## 數據庫中新增的 on_delete 參數
File "F:\for_jackan\app_ManageSystem\models.py", line 12, in BRsystemUser
Users = models.OneToOneField(User)

TypeError: __init__() missing 1 required positional argument: 'on_delete'
## 

File "C:\Anaconda3\lib\site-packages\django-2.1.2-py3.5.egg\django\urls\conf.py", line 39, in include 
'Specifying a namespace in include() without providing an app_name '

django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. 
Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

[05/Sep/2017 12:24:59] "GET /hello HTTP/1.1" 404 1947 Not Found: /favicon.icov

 

 


配置 setting(django 1.10.8):

setting.py 是在 python django-admin.py startproject project_name 的時候自動創建的。django 1.10.8 相較於 django 1.6.11 的變動不大,主要是 TEMPLATES,如下所示:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'debug': True,
        },
    },
]

配置 urls(django 1.10.8):

project 目錄下的 urls.py:相對 django 1.6.11 版本還是有較大的變化,django 1.10.8 版本配置如下所示:

  1. 導入所有 app_name 目錄下的 views:from app_ActiveModels import views
  2. url 路由:url(r'^$', views.Home_ActiveLearningSystem, name='Home_ActiveLearningSystem')

django 1.6.11 版本配置:url(r'^$', 'app_analyse.views.main'),直接使用 app_analyse.views.main 即可找到對應的函數。咋一看新的版本好像還比較麻煩,但這樣改肯定也是有一定的道理(我也是最近纔開始使用 django 1.10.8 版本,因爲在數據庫方面做了較大的改進,允許不刪除表的情況下,增加新的表字段)。

"""ActiveLearning_system URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url, include
from django.contrib import admin
from app_ActiveModels import views

urlpatterns = [
    url(r'^$', views.Home_ActiveLearningSystem, name='Home_ActiveLearningSystem'),
    url(r'^admin/', admin.site.urls),
    url(r'^app_ActiveModels/', include('app_ActiveModels.urls', namespace = 'app_ActiveModels')),
]

## + static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)

django 1.10 數據庫遷移:

python manage.py migrate
python manage.py makemigrations app_ManageSystem
python manage.py createsuperuser ## 創建超級管理員

MySQL 數據庫操作:

CREATE DATABASE DB_BR_Pro_Manage_System CHARACTER SET utf8;

drop database DB_BR_Pro_Manage_System;

運行:

(! python ./manage.py runserver 47.106.205.122:8000 &)

(! python manage.py runserver 0:8000 &)

(! python manage.py runserver 0:8000 --insecure &)

注意:

  1. 服務器上選擇的端口,要注意是否開放。
  2. Django運行訪問項目出現的問題:DisallowedHost at / Invalid HTTP_HOST header(在setting配置處,改爲 ALLOWED_HOSTS = ['*'])

在 views.py 中導入外部自定義的 py 文件:

想必很多人都有這個需求:不想把所有的代碼都寫在 veiws.py 文件中,不好管理且可讀性又差。

  1. veiws.py 文件用來實現邏輯、以及渲染指定的 html 文件;
  2. 一些計算過程、算法寫在外部自定義的 py 文件中,如:在根目錄下新建一個 lib 文件夾,然後再lib目錄下新建一些所需要的 py 腳本。

方法:

import sys
sys.path.append("lib_hcq")
from lib_hcq.log_relevant import *

遇到的問題:

ImportError: No module named lib_hcq.log_relevant

解決辦法:

## 問題:lib_hcq 目錄下沒有 __init__.py 文件
## 解決:創建一個空的py文件,命名爲 __init__.py,在 views.py 文件中引入:
sys.path.append("lib_hcq/log_relevant.py")
from lib_hcq.log_relevant import *

## A package can be imported with import foo.bar or from foo import bar. 
## For a directory (like polls) to form a package, it must contain a special file __init__.py, even if this file is empty.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章