1. 程式人生 > 其它 >2021/6/14 django基礎+路由層

2021/6/14 django基礎+路由層

'''
django 基礎
django-admin startproject xx
python manage.py startapp app01
installed_apps = [
'app01'
'app01.apps.App01Config'
]
手動建立模板資料夾
templates = [{

'DIRS':os.path.join(BASE_DIR, 'templates')
}]

手動建立靜態資料夾
staticfiles_dirs=[
os.path.join(BASE_DIR, 'static')

]

xx
xx
__init__.py
urls.py
wsgi.py
settings.py
app01
migrations
__init__.py
__init__.py
apps.py
views.py
tests.py
models.py
admin.py
templates
static
manage.py
db.sqlite3
python manage.py runserver [ip:port]

{% load static %}
{% static 'xxxx' %}
request
.method
.POST
.get()
.getlist()
.GET
.body
.FILES
.is_ajax()
.get_full_path()
.path()
.path_info()
.user
HttpResponse('string'), render(request, 'html', {'html':xx}), redirect('url')

瀏覽器 --》 wsgi ---》 django中介軟體 --》 urls路由曾 --》 views檢視層 ---》 templates
templates ---》 views
views ---> models.py
models--->views
views --> django中介軟體

路由曾
1. 路由匹配
from django.conf.urls import url
xxx = [
url('re', views.xxx, name=None, kwargs=None)
]
from django.urls import path, re_path
xxx = [
path('', views.xxx, name=None)
re_path('', views.xx, name=None, kwargs=None)
]
<str/int/slug/uuid/path: xx> ---> 作為**kwargs傳遞給檢視函式,xx = 轉換器匹配內容
亦可自定義轉換器
正則表示式
URL末尾反斜槓
django會自動加上 / 再請求一次,由settings.py中以下控制
append_slash = True
分組命名匹配
url('re1(re2)') --> 無名分組,作為*args傳遞給檢視函式
url('re1(?P<name>re2)') --> 有名分組,作為**kwargs傳遞給檢視函式, name=re2
反向解析
from django.shortcuts import reverse
reverse('url name引數值') 即可獲取 url中 除了ip地址後面的 /re/ 路徑

{% url 'name引數值' %}

無名分組反向解析
from django.shortcuts import reverse
reverse('name', args=(x,)) 將x作為無名分組的值,獲得真正的url
{% url 'name' x %}
有名分組反向解析
from django.shortcuts import reverse
reverse('name', kwargs={有名分組名: value,...})
reverse('name', kwargs=(,))
{% url 'name' 有名分組名=xx %}
{% url 'name' x %}
2. 路由分發
將多個app的路由彙總成一條url
可以在app下建立屬於自己的templates, static, urls.py
from django.conf.urls import url, include
from app01 import urls as u1
xx = [
符合該re匹配,就直接交給app01.urls匹配後面的內容,進行檢視跳轉
url(r'', include('app01.urls'))
url(r'', include(u1))
]
3. 名稱空間
當多個應用記憶體在url別名重名的情況,就需要使用名稱空間
ps:我們可以在命名的時候加上app的字首 app01_xx 即可避免衝突
from django.conf.urls import include, url
xx = [
url(r'', include('app01.urls', namespace='app01'))

]
{% url 'app01:xxx' %}
from django.shortcuts import reverse
reverse('app01:xxx')
4. 偽靜態
將一個動態頁面偽裝成一個靜態頁面,增大搜索機器人的搜尋頻率
只要在url正則規則中,加入.html結尾即可
url(r'^xxx.html', view.reg)





'''