詳解django中url路由配置及渲染方式
今天我們學(xué)習(xí)如何配置url、如何傳參、如何命名、以及渲染的方式,內(nèi)容大致有以下幾個方面。
- 創(chuàng)建視圖函數(shù)并訪問
- 創(chuàng)建app
- django中url規(guī)則
- 捕獲參數(shù)
- 路徑轉(zhuǎn)換器
- 正則表達(dá)式
- 額外參數(shù)
- 渲染方式
創(chuàng)建視圖并訪問
項(xiàng)目中自帶的Python文件中,并沒有帶有視圖,因此我們自己創(chuàng)建一個,通常,我們把視圖命名views.py。
然后在views.py中,導(dǎo)入頭文件
from django.http import HttpResponse
然后我們在views.py中,寫一些Python函數(shù),用來訪問
def hello(request): /*request用戶的請求 */ return HttpResponse(‘hello,歡迎來到django')
在url.py中為視圖函數(shù)配置路由
from django.urls import path
from . import views
urlpatterns = [
path('hello',hello),
]
運(yùn)行項(xiàng)目,如果上傳方式是Ctrl+S的話,記得上傳之后再運(yùn)行,成功后
瀏覽器輸入 127.0.0.1:8000/hello 即可訪問到
創(chuàng)建app
創(chuàng)建APP的方式不只一種,在虛擬機(jī)里可以創(chuàng)建,也可以在pycharm里創(chuàng)建
命令為:Python manage.py startapp appname
在虛擬機(jī)里創(chuàng)建完,要在pycharm中下載下來
在pycharm中創(chuàng)建:
方式一:
項(xiàng)目運(yùn)行成功后,在terminal里面找到本項(xiàng)目,輸入命令 Python manage.py startapp appname

如果沒有連接本地,則需要重新連接

方式二:
tool ----> run manage.py projectname

startapp appname
此方法也需要下載下來


下載完成后,創(chuàng)建的app就出現(xiàn)了。
url規(guī)則
1、網(wǎng)址組成
網(wǎng)址:全球統(tǒng)一資源定位符
https://www.i.cnblogs.com/EditPosts.aspx?postid=10423125
這是本文網(wǎng)址,做個栗子吧
https://www.i.cnblogs.com/EditPosts.aspx?postid=10423125
協(xié)議 域名 路徑 參數(shù)
django只搜索路徑部分,與其他都無關(guān)
2、django的路由系統(tǒng)
當(dāng)一個請求來到
1、首先到項(xiàng)目目錄下,url.py里查找路由規(guī)則
2、跟urlconf模塊,里面定義了urlpatterns變量
3、按順序運(yùn)行每一個,到第一個匹配的模式停止
4、一旦匹配,django導(dǎo)入并調(diào)用給定的視圖
5、如果沒有匹配到,或者中間出錯,則返回404
3、path里參數(shù)的含義
path(route,view,kwargs=None,name=None)
route : (必須有)是一個字符串的url規(guī)則
view : (必須有)是個視圖
kwargs :(可有可無)額外參數(shù),是字典類型,傳遞給view
name :(可有可無)url名字
4、在url中捕獲參數(shù)
尖括號 < 參數(shù) > 可以捕獲參數(shù),傳遞給視圖
本來捕獲的值是字符串
如果要捕獲兩個參數(shù),尖括號間可用/斜杠,也可用-連接符,但訪問要一致
5、路徑轉(zhuǎn)化器
如果想要讓捕獲的參數(shù)符合條件,那么我們會用到路徑轉(zhuǎn)化器
符號是冒號 : eg:<int:age>
常用的路徑轉(zhuǎn)化器
- int : 匹配任意整數(shù)
- path : 匹配任意非空字符
- str : 匹配除了 / 路徑分隔符外所有字符串
- uuid : 格式化id
- sulg : 匹配任意ASCII字符和連字符及下劃線
6、正則表達(dá)式
前面我們學(xué)習(xí)到路徑轉(zhuǎn)化器,但是有時候我們的轉(zhuǎn)化器并不能夠完全滿足我們捕獲參數(shù)的條件,像int轉(zhuǎn)化器去捕獲年份,如果我們傳入10000,肯定會捕獲呀,但不合理,因此,我們正則表達(dá)式可以更好用一些。
使用時,首先要導(dǎo)入進(jìn)來 form django.url import re_path
參數(shù)跟path里相同
下面看正則表達(dá)式的方法用什么捕獲方式
第一種是分組的,在視圖中根據(jù)參數(shù)名傳參
re_path(r'plan/(?P<year>\d\d\d\d)/(?P<month>[0-9]|1[0-2])/',plan),
年 四位數(shù),月 0-9 或者1和0-2
第二種是不分組的,在視圖中安位置傳參
re_path(r'plan/(\d{4})\([0-9]|1[0-2]/',plan),
\d\d\d\d與\d{4}含義相同,都是四位整數(shù)
7.主路由分配給分路由
如果所有是url都在主路由下配置,那么對于檢查和維護(hù)修改都會帶來不便,因此我們需要將主路由分配給各個app下的路由
方式:include()
使用方法:先需要導(dǎo)入,
from django.urls import path,include
使用: eg,名為teacher的APP,將主路由分給teacher.url
path(‘teacher/',include('teacher.urls')),
在teacher-APP中,創(chuàng)建urls.py(因?yàn)樾陆ǖ腁PP沒有自帶url.py)
在teacher.url.py中,手動輸入
form django.urls import path from .views import *
這里的views是此APP里的views
include可以多級使用
include的原理:當(dāng)遇到include時,路徑就被切斷,然后在include包含的分路由中開始繼續(xù)檢索。
在path(‘teacher-<age>/',include('teacher.urls')),里面?zhèn)鲄⑹强梢缘?,就是分路由每個都要傳參。
8、傳遞額外參數(shù)
當(dāng)在路由中傳入額外參數(shù)時,如果kwargs中key值與捕獲參數(shù)不一致,按照kwargs為準(zhǔn)。


如果在include后,傳遞的話,那么相當(dāng)于此分路由各個url后都有此額外參數(shù)。
9、app_name的作用
-頁面重定向
redirect 可以實(shí)現(xiàn)頁面跳轉(zhuǎn)
導(dǎo)入 from django.shortcuts import render,redirect,reverse[/code]
使用 return redirect(‘網(wǎng)址或者路徑')
-reverse
如果給path里加入name參數(shù),reverse(name)就等于前面路徑
因此實(shí)現(xiàn)頁面跳轉(zhuǎn),可以設(shè)變量url=reverse(name的值) 然后return redirect(url)即可實(shí)現(xiàn)
-app_name
那我們的name就不可以設(shè)為一樣的嗎?
在不同app下其實(shí)可以一樣,但需要使用app_name
在url.py里urlpatterns前寫
app_name = ‘a(chǎn)ppname'
使用:
url=reverse(appname:name)
10、模板系統(tǒng)
HTML源碼寫到模板文件中
-模板路徑設(shè)置
在項(xiàng)目中創(chuàng)建templates文件夾,在文件夾內(nèi)創(chuàng)建跟APP同名的文件夾
主目錄下settings.py中找到 然后寫入
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
}
-渲染
在templates下寫的HTML要如何使用呢?
在需要使用的視圖中引用
from django.template.loader import get_template from django.shortcuts import render
使用時需要渲染,用render
def new(request):
fg=get_template('student/index.html') 路徑從templates往下的開始寫
html=fg.render()
return HttpResponse(html)
訪問此視圖,HTML模板即可被渲染出來
另一種更簡便的方法
def new(request): return render(request,'student/index.html')
這次就到這里,下一篇會深入模板變量哦。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
手把手教你使用Django + Vue.js 快速構(gòu)建項(xiàng)目
本篇將基于Django + Vue.js,手把手教大家快速的實(shí)現(xiàn)一個前后端分離的Web項(xiàng)目。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Python3 微信支付(小程序支付)V3接口的實(shí)現(xiàn)
本文主要介紹了Python3 微信支付(小程序支付)V3接口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Python實(shí)現(xiàn)批量壓縮解壓文件(zip、rar)
Python是一種廣泛使用的編程語言,非常適合處理各種任務(wù),包括批量解壓縮文件,本文主要介紹了Python實(shí)現(xiàn)批量壓縮解壓文件,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
Python實(shí)現(xiàn)圖像隨機(jī)添加椒鹽噪聲和高斯噪聲
圖像噪聲是指存在于圖像數(shù)據(jù)中的不必要的或多余的干擾信息。在噪聲的概念中,通常采用信噪比(Signal-Noise?Rate,?SNR)衡量圖像噪聲。本文將利用Python實(shí)現(xiàn)對圖像隨機(jī)添加椒鹽噪聲和高斯噪聲,感興趣的可以了解一下2022-09-09
Sklearn調(diào)優(yōu)之網(wǎng)格搜索與隨機(jī)搜索原理詳細(xì)分析
這篇文章主要介紹了Sklearn調(diào)優(yōu)之網(wǎng)格搜索與隨機(jī)搜索原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02
實(shí)踐Vim配置python開發(fā)環(huán)境
這篇文章給大家分享了Vim配置python開發(fā)環(huán)境的實(shí)踐心得,大家可以跟著嘗試操作下。2018-07-07

