日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django—路由层,视图层

發(fā)布時(shí)間:2023/12/2 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django—路由层,视图层 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

路由層urls

瀏覽器會自動給url后加一個(gè)“/” django會自動給路由的正則表達(dá)式前面加一個(gè)“/” django會給任何不帶“/”結(jié)尾的url語句添加“/”(可設(shè)置) 短路路由規(guī)則:匹配到第一條就忽略后面所有! 所以路由順序很重要!

注意:第一個(gè)參數(shù)是正則表達(dá)式,匹配規(guī)則按照從上往下一次匹配,匹配到一個(gè)之后立即匹配,直接執(zhí)行對應(yīng)的視圖函數(shù)

網(wǎng)站首頁路由
url(r'^$',views.home)
網(wǎng)站不存在頁面
url(r'',views.error)

urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^index/$', views.index),]

url映射一般是一條正則表達(dá)式,“^” 字符串的開始,“$“ 字符串的結(jié)束

當(dāng)寫成\^$不輸入任何url時(shí)不會在返回黃頁,而是返回后面函數(shù)里對應(yīng)的頁面。一般這一條會寫在url的最后

無名分組

將加括號的正則表達(dá)式匹配到的內(nèi)容當(dāng)做位置參數(shù)自動傳遞給對應(yīng)的視圖函數(shù) url(r'^test/(\d+)/',views.test), # 匹配一個(gè)或多個(gè)數(shù)字def test(request,xxx):print(xxx)return HttpResponse('test')

有名分組

將加括號的正則表達(dá)式匹配到的內(nèi)容當(dāng)做關(guān)鍵字參數(shù)自動傳遞給對應(yīng)的視圖函數(shù) url(r'^test/(?P<year>\d+)/',views.test), # 匹配一個(gè)或多個(gè)數(shù)字def test(request,year):print(year)return HttpResponse('test')

注意

注意:無名分組和有名分組不能混著用!!! url(r'^test/(\d+)/(?P<year>\d+)/',views.test) 但是支持用一類型多個(gè)形式匹配 無名分組多個(gè)url(r'^test/(\d+)/(\d+)/',views.test), 有名分組多個(gè)url(r'^test/(?P<year>\d+)/(?P<xxx>\d+)/',views.test),

反向解析(根據(jù)名字動態(tài)獲取到對應(yīng)路徑)

試想一個(gè)場景,你有200多個(gè)a標(biāo)簽,href都指向index/,有一天在urls里面index改為了new_index,那么你只能手動改變a標(biāo)簽中的href,當(dāng)你改完,又變成了my_index,那么一天的時(shí)間都可能在改地址,那么有沒有什么方法,不再把程序?qū)懰?#xff0c;反向解析就是應(yīng)用于此。

通過名字反向推導(dǎo)出頁面文件,類似于字典

?

from django.shortcuts import reverseurl(r'^index6668888/$',views.index,name='index') # 可以給每一個(gè)路由與視圖函數(shù)對應(yīng)關(guān)系起一個(gè)名字 # 這個(gè)名字能夠唯一標(biāo)識出對應(yīng)的路徑 # 注意這個(gè)名字不能重復(fù)是唯一的

?

?

?

前端反向解析

{% url 'index' %} # {% url '放urls.py中路由與視圖函數(shù)的name的值' %}

后端反向解析

正則里面的路徑名之后就可以任意修改了 name里面的值不建議修改

from django.shortcuts import reverse def test(request):res=reverse('index')print(res)return render(request,'test.html')

無名分組反向解析

前端反向解析

后端反向解析

前端模板語法

{%for user_obj in user_list%}<a href='edit/{{ user_obj.pk }}/'></a> {% endfor %}

視圖函數(shù)

from django.shortcuts import reverse def edit(request,edit_id):url = reverse('edit',args=(edit_id,))

模板    

{% url 'edit' edit_id %}

有名分組反向解析

{% url 'index' 1 %} # {% url '放urls.py中路由與視圖函數(shù)的name的值' %} 推薦你用這種<a href="{% url 'index' year=1 %}">999</a> res = reverse('index',args=(1,)) # 推薦你用這種 res = reverse('add',kwargs={'year':1}) url = r'^反向/無名(有名)',view.'(傳無名)',name=('反向') def xxx (request 無名)reverse('反向',args(無名,))render(request,'.html',{'無名':無名}) 前端 href={%url '反向' 無名%}

路由分發(fā)(include)

項(xiàng)目總路由不再干路由與視圖函數(shù)匹配的活,而是做一個(gè)中轉(zhuǎn)站

django每一個(gè)app下面都可以有自己的urls.py路由層,templates文件夾,static文件夾
項(xiàng)目名下urls.py(總路由)不再做路由與視圖函數(shù)的匹配關(guān)系而是做路由的分發(fā)

注意:路由分發(fā) ?注意路由分發(fā)總路由千萬不要$結(jié)尾

# 在應(yīng)用下新建urls.py文件,在該文件內(nèi)寫路由與視圖函數(shù)的對應(yīng)關(guān)系即可 from django.conf.urls import url from app01 import views urlpatterns = [url(r'^index/',views.index) ]

簡便寫法

內(nèi)部用到了反射

名稱空間(了解)

如果兩個(gè)app下起了相同的名字,那么反向解析不支持自動查找應(yīng)用前綴

url(r'^app01/',include(app01_urls,namespace='app01')),url(r'^app02/',include(app02_urls,namespace='app02'))app01.urls.pyfrom django.conf.urls import urlfrom app01 import viewsurlpatterns = [url(r'^index/',views.index,name='index')]app02.urls.pyfrom django.conf.urls import urlfrom app02 import viewsurlpatterns = [url(r'^index/',views.index,name='index')]app01.views.pyreverse('app01:index')app02.views.pyreverse('app02:index')

偽靜態(tài)頁面

假裝自己的路徑是一個(gè)靜態(tài)(數(shù)據(jù)寫死的)文件的路徑,其實(shí)你 是經(jīng)過了視圖函數(shù)處理,動態(tài)渲染頁面 提高百度收藏你這個(gè)網(wǎng)頁力度,當(dāng)別人搜索你這個(gè)頁面相關(guān)的內(nèi)容 百度會優(yōu)先展示你的頁面(這樣雖然能提高你網(wǎng)頁被訪問概率,但是還是干不過RMB玩家)
url(r'^index.html',views.index,name='app01_index')

?虛擬環(huán)境(演示一下虛擬環(huán)境,下載django2.0測試自定義轉(zhuǎn)換器)

由來:
? ? 每個(gè)項(xiàng)目用到的模塊不一樣
目的:
? ? 為了讓每一個(gè)項(xiàng)目都有僅僅屬于自己的項(xiàng)目解釋器
使用:
? ? new project的時(shí)候選擇虛擬環(huán)境創(chuàng)建項(xiàng)目
? ? 如果勾選了下面的make to all project你創(chuàng)建的虛擬環(huán)境就能夠被其他新建的項(xiàng)目使用

?

?

?django2.0與django1.0的區(qū)別(了解)

?1.0里面的url對應(yīng)django2.0里面re_path
django2.0里面的path第一個(gè)是精準(zhǔn)匹配(你怎么寫的,我就怎么匹配)
django1.0版本中匹配到的參數(shù)都是字符串類型

?

django2.0轉(zhuǎn)換器(了解)

1.0版本的url和2.0版本的re_path分組出來的數(shù)據(jù)都是字符串類型
默認(rèn)有五個(gè)轉(zhuǎn)換器,感興趣的自己可以課下去試一下
  str,匹配除了路徑分隔符(/)之外的非空字符串,這是默認(rèn)的形式
  int,匹配正整數(shù),包含0。
  slug,匹配字母、數(shù)字以及橫杠、下劃線組成的字符串。
  uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  path,匹配任何非空字符串,包含了路徑分隔符(/)(不能用?)
  

  path('index/<str:id>/',index )

自定義轉(zhuǎn)換器

1.正則表達(dá)式
2.類
3.注冊

class FourDigitYearConverter:regex = '[0-9]{4}'def to_python(self, value):return int(value)def to_url(self, value):return '%04d' % value # 占四位,不夠用0填滿,超了則就按超了的位數(shù)來!register_converter(FourDigitYearConverter, 'yyyy')PS:路由匹配到的數(shù)據(jù)默認(rèn)都是字符串形式

視圖層(views.py)

django必會三板斧
  1.HttpResponse >>> 返回字符串
  2.render >>> 支持模板語法,渲染頁面,并返回給前端
  3.redirect >>> 重定向(即可以重定向到別人的網(wǎng)址,也可以重定向到自己路由)

django返回的數(shù)據(jù)都是HttpResponse對象

JsonResponse(返回json格式的數(shù)據(jù))

from django.http import JsonResponse def index(request):# res = {'name':'Jason大帥比','password':18}# return HttpResponse(json.dumps(res))return JsonResponse({'name':'Jason大帥比','password':'1888888'},json_dumps_params={'ensure_ascii':False})

FBV與CBV

FBV:基于函數(shù)的視圖
CBV:基于類的視圖

from django.views import View# Create your views here. class MyCls(View):def get(self):return HttpResponse('get')def post(self):return HttpResponse('post')

url(r'^login/',views.MyCls.as_view()) # >>>等價(jià)于 url(r'^login/',views.view)

?查看源碼

為什么我get請求就走get方法,post請求就走post方法

文件上傳

前端需要注意的點(diǎn):
1.method需要指定成post
2.enctype必須是multipart/form-data

def upload(request):if request.method == 'POST':# print(request.FILES)# print(type(request.FILES))# print(request.FILES.get('myfile'))# print(type(request.FILES.get('myfile')))# 獲取文件對象file_obj = request.FILES.get('myfile')# print(file_obj.name)# 獲取文件名file_name = file_obj.name# 文件讀寫操作with open(file_name,'wb') as f:# for line in file_obj:for line in file_obj.chunks(): #l類似于迭代器,每次取一行f.write(line)return render(request,'upload.html') request的八種屬性:request.GETrequest.POSTrequest.methodrequest.body 原始數(shù)據(jù)request.path # /upload/request.get_full_path() # /upload/?id=1   request.META 網(wǎng)頁原信息request.FILES 文件

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhengyuli/p/11000582.html

總結(jié)

以上是生活随笔為你收集整理的Django—路由层,视图层的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲制服丝袜诱惑 | 在线免费观看黄网 | 小蝌蚪av | 亚洲综合社区 | 久久超碰在线 | 国产最新视频 | 亚洲天堂自拍偷拍 | 色狠狠综合| 日本黄色免费大片 | 少妇精品无码一区二区 | 国产第6页| 卡一卡二在线视频 | jzzjzzjzz亚洲成熟少妇 | 中文字幕伦理 | 青娱乐国产 | 又紧又大又爽精品一区二区 | 九九热色 | 天堂在线中文在线 | 长篇高h乱肉辣文 | 国产不卡在线观看视频 | 日韩新片王网 | 强侵犯の奶水授乳羞羞漫虐 | 久久久成| 国产在线观看一区 | 打白嫩屁屁网站视频短裙 | 手机在线一区二区三区 | 日本乱轮视频 | 欧美性xxxxxxxxx | 国产精品污污 | 伊人国产精品 | 一个人免费在线观看视频 | 国产精品久久久久久久av福利 | 无码aⅴ精品一区二区三区 精品久久在线 | 日本午夜小视频 | 亚欧成人在线 | 免费无码一区二区三区 | 日本中文字幕久久 | 欧美日韩一区电影 | 97伊人 | 久久91精品 | 热re99久久精品国产99热 | 国产成人免费网站 | 亚洲av无码片一区二区三区 | 男女视频免费观看 | 性免费网站 | 国产精品一区二区三区四区 | 色噜噜一区二区三区 | www国产在线观看 | 欧美美女视频 | 在线观看黄色网 | 办公室荡乳欲伦交换bd电影 | 国产欧美一区二区三区在线看蜜臀 | 亚洲精品乱码久久久久久蜜桃动漫 | 色中文| 香港a毛片| 成人精品网 | 国内精品福利视频 | 特级新鲜大片片 | 成人做爰100 | sese在线| 岛国一区二区 | 亚洲乱强伦 | 国产91欧美 | 亚洲欧美日韩综合在线 | 四虎影院在线免费播放 | 香蕉视频网址 | 亚洲AV无码久久精品国产一区 | www.xxx.国产| 欧美一区二区三区黄片 | 在线看的av网站 | 91精品国产aⅴ一区 黄色a网 | 性av网 | 国产又爽又黄无码无遮挡在线观看 | 日韩毛片儿 | 免费激情网 | 久久久高清免费视频 | 蜜臀久久精品久久久久久酒店 | 午夜影院0606 | 浪浪视频污 | 国产一级生活片 | 91丨国产丨白丝 | 成人日韩在线 | 国产123 | 怡红院国产 | 欧美中日韩在线 | 成人在线免费高清视频 | 日韩网红少妇无码视频香港 | 成人午夜看片 | 久草视频免费在线播放 | 色噜噜av| 姑娘第5集在线观看免费好剧 | 打屁股无遮挡网站 | 成人在线激情网 | 丁香亚洲| 欧美天天性影院 | 538任你躁在线精品免费 | 四虎影视网 | 精品无码在线视频 | 国产精品伦一区二区三级视频 |