Django的特點(diǎn)
- 優(yōu)點(diǎn)
python語言锄列、代碼干凈、整潔
提供管理后臺惯悠,可以快速開發(fā)
復(fù)用度高邻邮,設(shè)計和使用上遵循DRY原則
易于擴(kuò)展復(fù)用的中間件
內(nèi)置安全框架
豐富的第三方類庫 - 缺點(diǎn)
單體應(yīng)用 - 不易并行開發(fā),單點(diǎn)擴(kuò)展
不適合非常小的幾行代碼的項(xiàng)目
不適用于高并發(fā)的to C 項(xiàng)目
一克婶、安裝
- 官網(wǎng)下載安裝包
https://media.djangoproject.com/releases/2.2/Django-2.2.5.tar.gz筒严;沒用過,接下來的步驟自行百度 - pip下載
1.命令:pip isntall Django
2.坑位:
出現(xiàn)WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
解決方法:使用pip install 【需要下載的東西】-i http://pypi.douban.com/simple --trusted-host pypi.douban.com
進(jìn)行安裝
二鸠补、創(chuàng)建項(xiàng)目和運(yùn)行
- 命令行
1.創(chuàng)建項(xiàng)目
django -admin startproject 項(xiàng)目名
2.運(yùn)行項(xiàng)目
$ python manage.py runserver
$ python manage.py runserver ip:端口
-
Pycharm
1.創(chuàng)建項(xiàng)目:
- 坑位
出現(xiàn)Make sure that you use the Django version of 'pip' installed for your Python interpreter
解決方法:切換到提示框所說的路徑下萝风,然后運(yùn)行pip install Django -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
然后再點(diǎn)擊提示框的按鈕
結(jié)果:
三、語言和時間改成中文
修改settings.py
文件:
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
結(jié)果:四紫岩、目錄結(jié)構(gòu)和介紹
- 最外層的
Django_Test
是項(xiàng)目的容器规惰,Django并不關(guān)心它的名稱,可以將它任意命名 -
manage.py
可以讓使用者使用各種方式管理Django項(xiàng)目的命令行工具泉蝌。詳情看:manage - 里面一層的
Django_Test
包含了項(xiàng)目歇万,它是一個純Python包。它的名字就是當(dāng)前Django項(xiàng)目的名字勋陪,我們引用它內(nèi)部任何東西時贪磺,使用的就是這個名字 -
Django_Test/__init__.py
:Python基礎(chǔ)的知識;一個空文件诅愚,用于告訴Python當(dāng)前目錄應(yīng)該是一個Python包 -
Django_Test/settings.py
:Django項(xiàng)目的配置文件寒锚。詳情看:Django settings -
Django_Test/urls.py
:Django項(xiàng)目的URL聲明,就好比網(wǎng)站的目錄违孝,注明了哪個url對應(yīng)什么內(nèi)容(頁面)刹前。詳情看:URL調(diào)度器 -
Django_Test/wsgi.py
:作為Django項(xiàng)目運(yùn)行在WSGI兼容的web服務(wù)器上的入口,詳情看:如何使用WSGI進(jìn)行部署 -
Django_Test/view.py
:自己創(chuàng)建的雌桑,MVT中的V:接收請求喇喉,邏輯處理,返回結(jié)果 -
templates
:模板校坑,放置返回給瀏覽器的html文件
五拣技、創(chuàng)建應(yīng)用
在Django中千诬,每個應(yīng)用對應(yīng)一個Python包,并且遵循同樣的約定膏斤。Django自帶一個工具徐绑,可以幫助我們自動生成Django應(yīng)用的基礎(chǔ)目錄結(jié)構(gòu),十分方便掸绞。
項(xiàng)目和應(yīng)用的區(qū)別
應(yīng)用:是一個專門做某件事情的網(wǎng)站應(yīng)用程序泵三,比如博客系統(tǒng),或者公共記錄的數(shù)據(jù)庫衔掸,或者簡單的投票程序烫幕。
項(xiàng)目:是一個網(wǎng)站使用的配置和應(yīng)用的集合。項(xiàng)目可以包含很多個應(yīng)用敞映。應(yīng)用可以被很多個項(xiàng)目使用较曼。-
現(xiàn)在要創(chuàng)建的應(yīng)用,會創(chuàng)建在和
Django_Test/Django_Test
同級的目錄振愿,這樣子它就可以作為頂級模塊導(dǎo)入捷犹,而不是Django_Test的子模塊
1.先來到manage.py
所處的目錄下,然后執(zhí)行命令:python manage.py startapp polls
2.創(chuàng)建成功的polls應(yīng)用:
3.注冊應(yīng)用
在Django_Test/Django_Test/settings.py
文件注冊新增的應(yīng)用polls
:
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 注冊子應(yīng)用
'polls.apps.PollsConfig' # 大部分情況簡寫成'polls'
]
4.編寫第一個視圖
polls/views.py
(管理視圖冕末,好比URL對應(yīng)的內(nèi)容)
這里添加視圖函數(shù):
1.第一個參數(shù)requests
是HttpRquest
對象萍歉,包含前端用戶的所有請求信息。
2.返回值必須是一個HttpResponse對象或者子對象
# 新增如下代碼
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("hello, django. You're at the polls index.")
def login(request):
# 可以通過request對象拿到請求的所有數(shù)據(jù)
if request.method == 'GET': # 大寫
return HttpResponse(" You're at the polls login.GET請求")
elif request.method == 'POST':
return HttpResponse(" You're at the polls login.POST請求")
else:
return HttpResponse(" You're at the polls login.其它請求")
5.編寫“目錄”
一個view創(chuàng)建后档桃,如果想要起到效果枪孩,我們需要創(chuàng)建一個url去映射到這個視圖。所以此時我們需要在該polls應(yīng)用目錄下創(chuàng)建一個url聲明文件urls.py
5.1.urls.py
PS.實(shí)際上藻肄,一個項(xiàng)目往往會有多個app蔑舞,那么Django是如何區(qū)分這些app的urlname的呢?這時候可以使用URL conf
的命名空間嘹屯。也就是在各個app的urls.py
文件的開頭攻询,添加上一個app_name
變量來指定該app的命名空間
from django.urls import path
from . import views
## 指定當(dāng)前應(yīng)用的命名空間
app_name = 'polls'
urlpatterns = [
# url路徑,所映射的view方法州弟,對應(yīng)的名稱
path(r'', views.index, name="index"),
# 注意不需要/
path(r'login', views.login, name="login"),
]
6.在項(xiàng)目中綁定應(yīng)用
應(yīng)用的內(nèi)容創(chuàng)建完畢钧栖,接下來就需要到項(xiàng)目根目錄的urls.py
文件中去綁定所創(chuàng)建的應(yīng)用的polls.urls
模塊
Django_Test/Django_Test/urls.py
:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
// host后面的第一級路徑、所映射應(yīng)用的所有url都在該一級路徑下
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls) # 進(jìn)入localhost:8000/admin會進(jìn)入Django的admin管理頁面
]
-
include()
路由轉(zhuǎn)發(fā)
允許引用其它 URLconfs婆翔。每當(dāng) Django 遇到 :func:~django.urls.include 時桐经,它會截斷與此項(xiàng)匹配的 URL 的部分,并將剩余的字符串發(fā)送到 URLconf 以供進(jìn)一步處理浙滤。它的設(shè)計理念是即插即用,因?yàn)橐粋€應(yīng)用會有多個url和view气堕,所以希望使用include()
配置了一條以后纺腊,就能夠訪問該應(yīng)用下的所有的路徑畔咧,比如說"/polls/"、"/polls/login"
什么時候使用include()
揖膜?
除了admin.site.urls
以外誓沸,匹配其它url時都應(yīng)該使用include()
還可以這樣靈活使用include()
進(jìn)行路由轉(zhuǎn)發(fā)
### 原來的路由配置
from django.urls import path
from . import views
urlpatterns = [
path('<page_slug>-<page_id>/history/', views.history),
path('<page_slug>-<page_id>/edit/', views.edit),
path('<page_slug>-<page_id>/discuss/', views.discuss),
path('<page_slug>-<page_id>/permissions/', views.permissions),
]
### 優(yōu)化后
urlpatterns = [
path('<page_slug>-<page_id>/', include([
path('history/', views.history),
path('edit/', views.edit),
path('discuss/', views.discuss),
path('permissions/', views.permissions),
])),
]
7.訪問
http://127.0.0.1:8000/polls/
http://127.0.0.1:8000/polls/login
六壹粟、path函數(shù)
-
path()
有四個參數(shù)拜隧,其中兩個必填參數(shù):route
和view
,兩個選填參數(shù)kwargs
和name
1.route
:是一個匹配 URL 的準(zhǔn)則(類似正則表達(dá)式)趁仙。當(dāng) Django 響應(yīng)一個請求時洪添,它會從 urlpatterns 的第一項(xiàng)開始,按順序依次匹配列表中的項(xiàng)雀费,直到找到匹配的項(xiàng)干奢。這些準(zhǔn)則不會匹配 GET 和 POST 參數(shù)或域名。例如盏袄,URLconf 在處理請求https://www.example.com/myapp/ 時忿峻,它會嘗試匹配 myapp/ 。處理請求 https://www.example.com/myapp/?page=3 時辕羽,也只會嘗試匹配 myapp/逛尚。
2.view
:當(dāng) Django 找到了一個匹配的準(zhǔn)則,就會調(diào)用這個特定的視圖函數(shù)刁愿,并傳入一個HttpRequest
對象作為第一個參數(shù)绰寞,被“捕獲”的參數(shù)以關(guān)鍵字參數(shù)的形式傳入。
3.kwargs
:任意個關(guān)鍵字參數(shù)可以作為一個字典傳遞給目標(biāo)視圖函數(shù)酌毡。
4.name
:給URL 取名能使我們在 Django 的任意地方唯一地引用它克握,尤其是在模板中。這個有用的特性允許我們只改一個文件就能全局地修改某個 URL 模式枷踏。
5.path函數(shù)官方文檔
七菩暗、類視圖
- 類視圖的優(yōu)點(diǎn):
1.代碼可讀性好
2.類視圖相對于函數(shù)視圖有更高的復(fù)用性,其它類可以通過繼承該視圖類就可以使用它的方法 - 例子:(把上面例子中的index修改成類視圖)
1./polls/views.py
from django.http import HttpResponse
from django.views import View
class Index(View):
"""
類視圖旭蠕,需繼承View類
"""
def get(self, request):
return HttpResponse("hello, django. You're at the polls index.==>GET")
def post(self, request):
return HttpResponse("hello, django. You're at the polls index.==>POST")
2.polls/urs.py
from django.urls import path
from . import views
urlpatterns = [
# 匹配類視圖
path(r'', views.Index.as_view(), name='index')
]
結(jié)果: