django修身大法之入門儀式
1.Django簡介
Django是一個重量性web框架,採用了MVC的框架模式,也有很多人把它稱為MVT(MTV)模式。
django版本
django各個版本對python的要求
Django Version | python version |
---|---|
1.11 | 2.7 3.4 3.5 3.6 |
2.0 | 3.4 3.5 3.6 3.7 |
2.1 2.2 | 3.5 3.6 3.7 |
2.Django安裝
2.1 安裝
可以先建立一個虛擬環境,然後在安裝django,看自己的需求
pip install django==版本號 -i https://pypi.douban.com/simple # -i表示選擇映象源,這裡選擇豆瓣的
安裝完畢後,測試下是否安裝成功
首先執行python,進入互動環境
>> import django
>> django.get_version()
3.第一個Django專案
先切換到指定目錄,然後用以下指令建立一個專案
3.1 建立專案
cd 目錄
django-admin startproject 專案名 # 該語句用於建立django專案
3.2 專案的目錄結構
├── hello #項⽬⽬錄 │ ├── __init__.py #包標誌 │ ├── settings.py #項⽬配置⽂件 │ ├── urls.py #路由對映表 │ └── wsgi.py #wsgi接⼝ └── manage.py #項⽬管理命令
manage.py:是Django⽤於管理本項⽬的命令⾏⼯具,之後進⾏站點運⾏,資料庫
⾃動⽣成等都是通過本⽂件完成。
專案配置檔案
# 項⽬根⽬錄 manage.py所在⽬錄 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 除錯模式 DEBUG = True #允許訪問的主機 ALLOWED_HOSTS = ['*'] # 安裝的應⽤,⾃⼰定義應⽤也應該新增到這⾥ INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] #模板配置 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], #模板路徑 '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', ], }, }, ] # 資料庫配置 # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # 國際化 # https://docs.djangoproject.com/en/1.11/topics/i18n/ LANGUAGE_CODE = 'zh-hans' #語⾔編碼 TIME_ZONE = 'Asia/Shanghai' #時區
3.3 測試伺服器啟動
在命令⾏下鍵⼊:
#命令:python manage.py runserver [ip:port]
python manage.py runserver
python manage.py runserver 0.0.0.0:9000
測試伺服器預設端⼝是8000,僅限於本地連線。開啟瀏覽器輸⼊:
可以看到⾃⼰的⽹站。
http://localhost:8000 #或者
http://127.0.0.1:8000
可以看到⾃⼰的⽹站。
如果要讓遠端客戶端連線需要修改配置⽂件,其中0.0.0.0:9000是可選的,0.0.0.0
說明任何ip都可以訪問。
3.4 建立應用
⼀個django項⽬中可以包含多個應⽤,可以使⽤以下命令建⽴應⽤:
#命令: python manager.py startapp 應⽤名稱
例項: python manager.py startapp app
建立應⽤後,項⽬的結構如下:
├── App
│ ├── admin.py 站點管理
│ ├── apps.py 應⽤程式⾃身資訊
│ ├── __init__.py
│ ├── migrations 資料遷移
│ │ └── __init__.py
│ ├── models.py 模型
│ ├── tests.py
│ └── views.py 檢視響應函式
├── db.sqlite3 sqlite資料庫
├── hellodjango 項⽬
│ ├── doc.py
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── settings.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── wsgi.cpython-36.pyc
│ ├── settings.py 系統配置
│ ├── urls.py 路由對映表
│ └── wsgi.py wsgi協議
└── manage.py 項⽬管理命令
修改專案的配置檔案settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'App', # 安裝自己的應⽤,這裡要注意匯入路徑,在後期會講
]
到此為⽌,我們已經搭建好項⽬的基本框架,但項⽬還沒有實質性內容,下⾯將從
檢視函式開始給項⽬新增功能。
4. 簡單檢視函式
在django中view代表檢視函式,接收⽤戶的請求,進⾏處理然後返回html原始碼
給客戶端。在框架中,我們可以在應⽤(app)的views.py中寫⾃⼰的檢視函式,
進⾏相應的處理。
檢視函式只是⼀個普通的python函式,它的第⼀個引數必須是⼀個請求(request)物件,這是框架傳⼊的,我們可以通過請求物件獲取提交引數等內
容。它的返回值必須是⼀個web響應物件,可以⽂本、html原始碼、重定向、404
等內容。下⾯我們寫⼀個簡單檢視函式,返回“Hello Django"
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello Django")
其中HttpResponse函式需要引⼊模組django.http,我們可以直接寫
HttpResponse,然後通過快捷鍵alt+enter,在下拉框中選擇要導⼊的模組。
- alt+enter 程式碼飄紅、飄⻩、檢視定義、引⼊包都可以使⽤。
5. 基本路由
新增完檢視函式後,還⽆法在瀏覽器中檢視,必須新增路由。所謂路由就是將⽤戶
請求轉換為訪問對應的檢視函式。項⽬路由在hello下urls.py中
"""
from django.conf.urls import path
from django.contrib import admin
from App import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index)
]
路由由兩部分組成,第⼀部是⼀個匹配字串(和flask規則相同),匹配⽤戶的請
求路徑,第⼆部分是檢視函式
path('', views.index)
views.index 檢視函式
匹配字串匹配⽤戶在位址列中鍵⼊的url,當⽤戶在位址列中鍵⼊http://localhos
t:9000時會顯示Hello World.
6. 簡單模板
在上⾯我們已經能夠展示簡單的web⻚⾯,但要顯示⼀個html⻚⾯,需要使⽤模
板,在app下建⽴templates⽬錄,在templates⽬錄下建⽴⼀個index.html⽂件
重點:如果不是訪問app下的templates模板的話,則需要在配置檔案裡設定模板資料夾所在的位置,如果是用pycharm建立的話,會預設新增,手動建立則需要注意該操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>搜狐</title>
</head>
<body>
當你的才華還撐不起你的ᰀ⼼的時候,你就應該靜下⼼來學習;<br>
當你的能⼒還駕馭不了你的⽬標時,就應該沉下⼼來,歷練;
</body>
</html>
然後修改views中檢視函式index
from django.shortcuts import render
def index(request):
return render(request,'index.html')
重新訪問網站
也可以在html中使⽤變ᰁ和流程控制結構,⽣成複雜的html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 模板中新增變數 -->
<title>{{ title }}</title>
</head>
<body>
當你的才華還撐不起你的ᰀ⼼的時候,你就應該靜下⼼來學習;<br>
當你的能⼒還駕馭不了你的⽬標時,就應該沉下⼼來,歷練;
</body>
</html>
然後修改檢視函式:
from django.shortcuts import render
def index(request):
return render(request,'index.html',context={'title':'草榴'}) # 這裡的context是上下文,用於給模板傳入資料
重新訪問首頁
7. 簡單模型
django⾃帶了⼀個sqlite資料庫,可以⽤於測試,⽣產環境⼀般不⽤。在配置⽂件
中已經設定好預設的sqlite資料庫。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', #資料庫引擎
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), #資料庫⽂件路徑
}
}
然後到app中models.py中建立⼀個User類:
class User(models.Model):
uname = models.CharField(max_length=20)
password = models.CharField(max_length=32)
到命令⾏下,輸⼊:
python manage.py makemigrations #⽣成資料庫遷移⽂件
python manage.py migrate #⽣成資料庫表
然後到pycharm左邊欄database中檢視:
生成的表名預設是app應用名加下劃線加類名的小寫,如果想更改,可以在模型類中定義class Meta,宣告db_table,
雙擊app_user新增資料:
到此為⽌,我們已經給app_user表添加了資料。然後給app新增⼀個模板:
list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>⽤戶列表</title>
</head>
<body>
<table width="80%" align="center" border="1" cellspacing="0">
<caption>⽤戶列表</caption>
{% for user in users %} //模板語法,這裡先這樣寫,跟python的迴圈很像,後面會詳細講
<tr>
<td>{{ user.uname }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
繼續給app新增⼀個檢視操作函式:
from app.models import User
def userlist(req):
#獲取app_user表中所有資料
persons = User.objects.all() # orm語法,獲取所有的user資料
return render(req,"list.html", context={'users':persons})
在項⽬的路由表中新增路由:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$',views.index),
url(r'^list/$',views.userlist),
]
到瀏覽器中訪問:http://localhost:9000/list/
好了,今天先簡單的介紹下django大概的樣子,後面會詳細的講解
溜了,peace