Django从理论到实战(part10)--URL命名与反转
學習筆記,僅供參考
參考自:Django打造大型企業官網;
本系列Blog以應用為主,理論基礎部分我在后端專欄的Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,盡量詳細的寫一下。
URL命名與反轉
學前準備
- 創建兩個新的APP
創建front應用,用于管理前臺相關代碼:
python manage.py startapp front創建cms應用,用于管理后臺相關代碼:
python manage.py startapp cms- 對兩個APP進行配置
settings.py:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','book','cms','front', ]URL命名及反轉
- 情況1(url命名不沖突)
cms應用下的urls.py:
from django.urls import path from . import viewsurlpatterns = [path('', views.index),path('login/', views.login), ]front應用下的urls.py:
from django.urls import path from . import viewsurlpatterns = [path('', views.index),path('login/', views.login), ]主urls.py:
from django.contrib import admin from django.urls import path from . import views from django.conf.urls import includeurlpatterns = [path('admin/', admin.site.urls),path('', views.baidu),path('login/', views.login, name = "signin"),path('book/', include('book.urls')),path('cms/', include('cms.urls')),path('front/', include('front.urls')), ]在主urls.py中,對代表登錄頁面的url進行命名。
cms應用下的views.py:
from django.http import HttpResponse # Create your views here.def index(request):return HttpResponse("CMS首頁")def login(request):return HttpResponse("CMS登錄頁面")front應用下的views.py:
from django.http import HttpResponse from django.shortcuts import redirect,reverse# Create your views here.def index(request):username = request.GET.get("username", "")if username:return HttpResponse("front首頁")else:login_url = reverse('signin')#利用url的name參數反轉得到相應的urlprint("-+"*15)print(login_url)print("-+"*15)return redirect(login_url)def login(request):return HttpResponse("front登錄頁面")利用url的name參數進url反轉,跳轉到主頁的登錄界面。
主views.py
from django.http import HttpResponseRedirect from django.http import HttpResponsedef baidu(request):return HttpResponseRedirect("https://www.baidu.com/")def login(request):return HttpResponse("主頁的登錄頁面")現在,我們在瀏覽器中輸入http://127.0.0.1:8000/front/:
回車,跳轉到首頁的登錄界面:
控制臺輸出:
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /login/ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ [03/Jul/2020 07:34:16] "GET /front/ HTTP/1.1" 302 0 [03/Jul/2020 07:34:16] "GET /login/ HTTP/1.1" 200 21- 情況2(url命名沖突)
當url命名出現沖突的情況下,即在開發過程中,在不同應用中,設置相同的url的name參數的情況,這樣可能就可能出現url反轉的混亂。
這時,我們可以通過給app起名字的方式,即設置應用命名空間app_name變量,解決該問題。同時,在視圖函數中,我們還需要用命名空間:name的方式對url進行反轉。
front應用下的urls.py:
app_name = 'front'urlpatterns = [path('', views.index),path('login/', views.login, name = "signin"), ]cms應用下的urls.py:
app_name = 'cms'urlpatterns = [path('', views.index),path('login/', views.login, name = "signin"), ]front應用下的views.py:
def index(request):username = request.GET.get("username", "")if username:return HttpResponse("front首頁")else:login_url = reverse('cms:signin')#利用url的name參數反轉得到相應的urlprint("-+"*15)print(login_url)print("-+"*15)return redirect(login_url)def login(request):return HttpResponse("front登錄頁面")跳轉到cms應用的登錄頁面。
cms應用下的views.py:
from django.http import HttpResponse # Create your views here.def index(request):return HttpResponse("CMS首頁")def login(request):return HttpResponse("CMS登錄頁面")現在,我們向http://127.0.0.1:8000/front/發起請求:
可以看到,頁面跳轉到了CMS的登錄界面。
查看控制臺輸出:
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /cms/login/ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ [03/Jul/2020 07:56:30] "GET /front/ HTTP/1.1" 302 0 [03/Jul/2020 07:56:30] "GET /cms/login/ HTTP/1.1" 200 15 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Django从理论到实战(part10)--URL命名与反转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django从理论到实战(part9)-
- 下一篇: Django(part11)--利用UU