簡介
各環境的使用版本如下:
Linux Mint 18.2 (Ubuntu 16.04);
python版本2.7.12和3.5.2;
Django版本爲1.9。
Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。Django是一個開放源代碼的Web應用框架,由Python寫成,遵守BSD版權,初次發佈於2005年7月, 並於2008年9月發佈了第一個正式版本1.0 。採用了MVC的軟件設計模式,即模型M,視圖V和控制器C。
Django對應Python版本如下:
Django版本 | Python 版本 |
---|---|
1.5 | 2.6.5,2.7,3.2,3.23 |
1.6 | 2.6,2.7,3.2,3.3 |
1.7 | 2.7,3.2,3.3,3.4 |
1.8 | 2.7, 3.2 , 3.3, 3.4, 3.5 |
1.9, 1.10 | 2.7, 3.4, 3.5 |
1.11 | 2.7, 3.4, 3.5, 3.6 |
2.0 | 3.5+ |
安裝
- 安裝Django
pip安裝
# 這是基於python2版本的安裝
sudo apt-get install python-pip
sudo pip install Django==1.9
# 這是基於python3版本的安裝
sudo apt-get install python3-pip
sudo pip3 install Django==1.9
Linux自帶源安裝:
sudo apt-get install python-django==1.9 -y
自帶源安裝的 Django 一般版本比較舊,而用 pip 可以安裝最新的版本。
安裝完成後執行下述命令查看安裝的版本:
python -c "import django; print(django.get_version())"
創建一個項目
創建項目
在命令行(終端)中,cd(例如我的是:cd /media/youjun/17658FC8797DEE2A/WorkSpace/DjangoWorkSpace)到你想要用來保存代碼的目錄,然後運行如下命令,如果你怕權限問題在前面加上sudo:
django-admin startproject demo
然後你看到生成的目錄結構如下:
demo
demo # 對整個程序進行配置
__init__.py
settings.py # 配置文件
urls.py # URL對應關係
wsgi.py # 遵循WSGI規範,一般使用 uwsgi + nginx
manage.py # 管理Django程序:如下
運行項目
# 在python2版本運行
python manage.py # 或如下
python manage.py 8000 # 或如下
python manage.py runserver 127.0.0.1:8000
# 在python3版本運行
python3 manage.py # 或如下
python3 manage.py 8000 # 或如下
python3 manage.py runserver 127.0.0.1:8000
執行上述命令時會出現紅:
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
這是沒有應用數據庫設置,先不管。
打開 http://127.0.0.1:8000/ 鏈接就能看到Django的It worked!界面。
創建app
在項目生成的第一層demo目錄下(與manage.py同級),執行如下命令創建一個名爲login的app,(版本選擇只是多或者少一個數字,後面就不都寫出來了):
# 在python2版本運行
python manage.py startapp login
# 在python3版本運行
python3 manage.py startapp login
生成的app目錄如下:
login
migrations # django orm框架,修改表結構的操作記錄(差異化)
__init__.py # python3中有沒有都一樣,python2中必須有
admin.py # Django爲我們提供的後臺管理
apps.py # 配置當前app
models.py # ORM:寫指定的類,通過命令可以創建數據庫結構,M層
tests.py # 測試
views.py # V層
配置文件
要想項目能映射到建立的app,修改第二層demo目錄的setting.py文件:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login', # changed-----
]
視圖函數編輯,編輯生成的login目錄裏的views.py文件:
from django.shortcuts import render
# Create your views here.
def login(request):
context = {}
return render(request, 'login.html', context)
接着,綁定 URL 與視圖函數,修改第二層demo目錄裏的urls.py文件。網頁action提交那裏action=”/”,要和urls.py 裏url(r’^’, views.login),保持一致!!!要是login/全是login/,要是login全是login(網頁那裏最前面多一個/來引用),否則點擊提交會報錯::
from django.conf.urls import url
from django.contrib import admin
from login import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', views.login),
]
在第一層demo目錄下創建一個templates模板文件夾,用來存放html文件,在templates文件中新建一個login.html文件,內容爲:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<p>
<label for="username">用戶名:</label>
<input id="username" type="text" />
</p>
<p>
<label for="password">密 碼:</label>
<input id="password" type="text" />
</p>
<p>
<input type="submit" value="提交" />
</p>
</form>
</body>
</html>
修改第二層demo目錄的setting.py文件,將模板文件路徑寫入:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # changed---------
'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',
],
},
},
]
運行測試
然後你可以打開終端去第一層demo目錄下,運行項目了(如果上次的沒結束,按ctr+c結束):
python manage.py runserver 127.0.0.1:8000
打開 http://127.0.0.1:8000/ 鏈接就能看到簡單的註冊界面(login.html)。但是在點擊提交按鈕的時候出現錯誤,原因是CSRF驗證失敗。請求中止,您看到消息是因爲網站在提交表單時需要使用CSRF Cookie。出於安全原因,此cookie是必需的,以確保瀏覽器不被第三方劫持。
我們修改第二層demo目錄的setting.py文件,再點擊提交就會再跳到登錄頁面,沒錯,由於我們只寫了一個頁面就暫時跳到原來頁面,後面再實現不同頁面的請求跳轉:
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]