您好,登錄后才能下訂單哦!
遵循MVC設計模式的框架,MVC是Model、View、Controller的三個單詞的簡寫。分別代表模型、視圖、控制器。
# 創建項目
1、命令行:django-admin startproject [項目名稱]
2、pycharm方式:文件->創建項目->選擇django。然后指定項目所在的路徑,以及python解釋器。
#運行項目
python manage.py runserver
可添加端口 python manage.py runserver 8088
對公訪問 python manage.py runserver 0.0.0.0 8088
python manage.py startapp django_1
django.http.response.HttpResponseBase
的子類的對象。ROOT_URLCONF
為urls.py
。所有的django會去urls.py中尋找。urls.py
中我們所有的映射都應該放在urlpatterns
這個變量中。path
函數或者是re_path
函數進行包裝的。<參數名>
的方式傳遞參數,然后在視圖函數中也要寫一個參數。視圖函數中的參數必須和url中的參數名稱保持一致,不然找不到這個參數。request.GET.get('參數名稱')
的方式來獲取。代碼如下:
def author_detail(request):
author_id = request.GET['id']
text = '作者的id是:%s' % author_id
return HttpResponse(text)
因為查詢字符串使用的是GET
請求,所以我們通過request.GET
來獲取參數,并且因為GET
是一個類似于字典的數據類型,所有獲取值跟字典的方式都是一樣的。
如何給一個url指定名稱
在path函數中,傳遞一個name
參數就可以指定。
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('',views.index,name='index'),
path('signin/',views.login,name='login')
]
# views.py
from django.http import HttpResponse
from django.shortcuts import redirect,reverse
def index(request):
username = request.GET.get('username')
if username:
return HttpResponse('首頁')
else:
return redirect(reverse('login'))
應用命名空間
在多個app之間,有可能產生同名的url。這時為了避免反轉url的時候產生混淆,可以使用應用命名空間來做區分。定義應用命名空間非常簡單,只要在app的urls.py中定義一個叫做app_name的變量來指定這個應用的命名空間即可。
# urls.py
from django.urls import path
from . import views
app_name = 'front'
urlpatterns = [
path('',views.index,name='index'),
path('signin/',views.login,name='login')
]
# views.py
from django.http import HttpResponse
from django.shortcuts import redirect,reverse
def index(request):
username = request.GET.get('username')
if username:
return HttpResponse('首頁')
else:
return redirect(reverse('front:login'))
# 一個app可以創建多個實例,可以使用多個url映射同一個app。在做反轉的時候使用應用命名空間,那么就會發生混淆,為了避免這個問題就可以使用實例命名空間。在include函數中傳遞一個namespace變量即可。
# urls.py
from django.urls import path,include
urlpattterns = [
path('',include('front.urls')),
path('cms1/',include('cms.urls',namespace='cms1')),
path('cms2/',include('cms.urls',namespace='cms2'))
]
多個app后主app的urls.py里的urlpatterns會寫入過多路徑,可通過在app里創建自身app對應的urls.py來方便路徑轉發。
# 主urls.py,使用include函數包含子urls.py
from django.urls import path,include
urlpattterns = [
path('book/',include('book.urls'))
# 以book開頭的url都會轉到book app下的urls.py
]
# book app的 urls.py
from django.urls import path
from . import views
urlpattterns = [
path('',views.book),
path('detail/<book_id>',views.book_detail),
path('list/',views.book_list),
]
1、如果反轉url的時候,需要添加參數,那么可以傳遞kwargs參數到reverse函數中。
2、如果想要添加查詢字符串的參數,則必須手動的
進行拼接。
# views.py
from django.http import HttpResponse
from django.shortcuts import reverse,redirect
def index(request):
username = request.GET.get('username')
if username:
return HttpResponse("首頁")
else:
# login_url = reverse('login') + "?next=/"
# return redirect(login_url)
detail_url = reverse('detail',kwargs={'article_id':1,'page':2})
return redirect(detail_url)
def login(request):
return HttpResponse("登錄頁面")
def article_detail(request,article_id):
text = '您的文章id是:%s' % article_id
return HttpResponse(text)
# urls.py
from django.urls import path
from front import views
urlpatterns = [
path('',views.index,name='index'),
path('login/',views.login,name='login'),
path('detail/<article_id>/<page>/',views.article_detail,name='detail')
]
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。