2021/6/15 django基礎 路由曾 檢視層
阿新 • • 發佈:2021-06-15
'''
建立專案
django-admin startproject 專案名
python manage.py startapp app01
installed_apps=[
'app01',
'app01.apps.App01Config'
]
手動建立templates
templates = [{
'DIRS': os.path.join(BASE_DIR, 'templates')
}]
手動建立靜態檔案
staticfiles_dirs = [
os.path.join(BASE_DIR, 'static')
]
目錄結構
xxx
app01
migrations
__init__.py
__init__.py
models.py
tests.py
apps.py
views.py
admin.py
xxx
__init__.py
urls.py
wsgi.py
settings.py
manage.py
static
templates
db.sqlite3
開啟django服務
python manage.py runserver
靜態檔案
{% load static %} 引入配置檔案中 static 變數的值
{% static 'zzw/1' %} 此刻static代表 /static/,即合併後/static/zzw/1
request 背過了
django三板斧
HttpResponse 返回字串給前端,字串中可以存在html語言,一樣生效
redirect 重定向
render 返回完整html模板檔案給前端,內部原始碼還是使用 HttpResponse
django 請求宣告週期圖
路由匹配
from django.conf.urls import url
url('re', view.xxx, name=None, kwargs=None)
from django.urls import path, re_path
path('絕對匹配', view.xxx, name=None)
re_path('re', view.xxx, name=None, kwargs=None) --> url
轉換器
<str/int/slug/uuid/path:xx> --> **kwargs
str: 匹配非/以外的所有非空白字元
path:匹配所有非空白字元
int: 正整數,包括0
slug:數字、字母、下劃線、中橫線
uuid:uuid的標準格式
自定義轉換器(可以自定義轉換器,在內部書寫正則,然後在url中引用、註冊、呼叫)
URL末尾反斜槓
由 append_slash=Ture 控制,預設由django加上/再匹配一次
分組命名匹配
無名有名不能混合使用
無名分組
(re) --> *args
有名分組
(?P<xxx>re) --> **kwargs
反向解析
from django.shortcuts import reverse
reverse('name') --> ip後面的路徑
無名反向解析
url(r'(re)')
from django.shortcuts import reverse
reverse('name', args=(x,))
{% url name x %}
有名分組反向解析
url(r'(?P<xxx>re)')
from django.shortcuts import reverse
reverse('name', args=(x,))
{% url name x %}
reverse('name', kwargs={'xxx':xx})
{% url name xxx=x %}
路由分發
每一個應用下,都可以擁有自己的templates、static、urls.py,需要自己手動建立
from django.conf.urls import url, include
url(r'', include('app01.urls'))
from app01 import urls as xxx
url(r'', include(xxx))
名稱空間
防止多個應用下的url name名稱衝突(PS:name命名使用 應用名_名稱,即可避免)
from django.conf.urls import include, url
url(r'', include('app01.urls', namespace='app01'))
這樣,app01的url就存放在他自己的名稱空間內,不會出現名稱衝突了
偽靜態
url後面都有.html結尾,即是靜態網頁,會增加搜尋機器人的搜尋頻率
url(r'xxx.html') 即可
簡單的檢視函式
url(r'', views.zzw, name="zzw")
def zzw(xxx):
return HttpResponse('zzw')
FBV與CBV
FBV:函式方式的檢視函式
CBV:基於類的檢視
CBV原始碼
url(r'', views.xxx.as_view())
關鍵在as_view(),其內部存在一個巢狀函式為view
as_view()的返回值就是view
view函式內部,將引數進行賦值,並返回了dispatch函式的呼叫
該函式內部進行了反射操作,然後返回對應的函式呼叫,從而實現
get請求來,就是呼叫get方法
CBV新增裝飾器
method_decorator(login_auth, name="")
如果放在類上面,同時指定name屬性,那麼就是裝飾指定的方法
如果放在類內的第一個方法上,那就是裝飾所有方法
如果放在類內的非第一個方法上面,那就是單獨裝飾該方法
request
屬性
.method 返回請求方式,大寫
.POST 返回字典,POST請求中的資料,如 application/x-www-form-urlencoded,ajax
.GET 返回字典,GET請求中的資料
.get(k)
.getlist(k)
.FILES 返回字典,檔案資料,如 multipart/form-data,ajax中 FormData()
.body 返回bytes,如ajax json
.META 返回HTTP協議頭部
.scheme 返回當前Http協議 http/https
.path 返回當前路徑,出去ip和路徑引數
.path_info 與path一致
.encoding 返回編碼方式,none代表使用瀏覽器的預設編碼方式
.session 返回session
.COOKIES 返回cookies
.user 返回當前登入的使用者物件
方法
is_secure() 如果時https協議,返回True
is_ajax() 如果是ajax請求,返滬True
get_full_path() 返回ip後面的完整路徑,包括路徑引數
get_host() 返回ip:port
使用者物件方法
is_authenticated() 判斷當前使用者是否登入,返回bool
set_password('xxx')
save()
check_password('xxx') 校驗密碼,返回bool
HttpResponse
a = HttpResponse('xxx')
a.content
a.charset
a.status_code
a['Content-Type'] = 'text/html'
del a['Charset']
from django.http import JsonResponse
JsonResponse(
data,
json_dumps_params={'ensure_ascii':False}
safe=True,
)
render
(
request,
'html',
{'前端名': '後端資料'}, 簡單點直接寫入 locals() 將函式內的區域性變數全部傳遞過去
content-type
status=200,
using,
)
redirect
(
url
permanent=True
)
'''