遵循MVC設(shè)計(jì)模式的框架,MVC是Model、View、Controller的三個(gè)單詞的簡(jiǎn)寫(xiě)。分別代表模型、視圖、控制器。
# 創(chuàng)建項(xiàng)目
1、命令行:django-admin startproject [項(xiàng)目名稱]
2、pycharm方式:文件->創(chuàng)建項(xiàng)目->選擇django。然后指定項(xiàng)目所在的路徑,以及python解釋器。
#運(yùn)行項(xiàng)目
python manage.py runserver
可添加端口 python manage.py runserver 8088
對(duì)公訪問(wèn) python manage.py runserver 0.0.0.0 8088
python manage.py startapp django_1
django.http.response.HttpResponseBase
的子類的對(duì)象。ROOT_URLCONF
為urls.py
。所有的django會(huì)去urls.py中尋找。urls.py
中我們所有的映射都應(yīng)該放在urlpatterns
這個(gè)變量中。path
函數(shù)或者是re_path
函數(shù)進(jìn)行包裝的。<參數(shù)名>
的方式傳遞參數(shù),然后在視圖函數(shù)中也要寫(xiě)一個(gè)參數(shù)。視圖函數(shù)中的參數(shù)必須和url中的參數(shù)名稱保持一致,不然找不到這個(gè)參數(shù)。request.GET.get('參數(shù)名稱')
的方式來(lái)獲取。代碼如下:def author_detail(request):
author_id = request.GET['id']
text = '作者的id是:%s' % author_id
return HttpResponse(text)
因?yàn)椴樵冏址褂玫氖?code>GET請(qǐng)求,所以我們通過(guò)request.GET
來(lái)獲取參數(shù),并且因?yàn)?code>GET是一個(gè)類似于字典的數(shù)據(jù)類型,所有獲取值跟字典的方式都是一樣的。
如何給一個(gè)url指定名稱
在path函數(shù)中,傳遞一個(gè)name
參數(shù)就可以指定。
# 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('首頁(yè)')
else:
return redirect(reverse('login'))
應(yīng)用命名空間
在多個(gè)app之間,有可能產(chǎn)生同名的url。這時(shí)為了避免反轉(zhuǎn)url的時(shí)候產(chǎn)生混淆,可以使用應(yīng)用命名空間來(lái)做區(qū)分。定義應(yīng)用命名空間非常簡(jiǎn)單,只要在app的urls.py中定義一個(gè)叫做app_name的變量來(lái)指定這個(gè)應(yīng)用的命名空間即可。
# 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('首頁(yè)')
else:
return redirect(reverse('front:login'))
# 一個(gè)app可以創(chuàng)建多個(gè)實(shí)例,可以使用多個(gè)url映射同一個(gè)app。在做反轉(zhuǎn)的時(shí)候使用應(yīng)用命名空間,那么就會(huì)發(fā)生混淆,為了避免這個(gè)問(wèn)題就可以使用實(shí)例命名空間。在include函數(shù)中傳遞一個(gè)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'))
]
多個(gè)app后主app的urls.py里的urlpatterns會(huì)寫(xiě)入過(guò)多路徑,可通過(guò)在app里創(chuàng)建自身app對(duì)應(yīng)的urls.py來(lái)方便路徑轉(zhuǎn)發(fā)。
# 主urls.py,使用include函數(shù)包含子urls.py
from django.urls import path,include
urlpattterns = [
path('book/',include('book.urls'))
# 以book開(kāi)頭的url都會(huì)轉(zhuǎn)到book app下的urls.py
]
# book app的 urls.py
from django.urls import path
from . import views
urlpattterns = [
path('',views.book),
path('detail/',views.book_detail),
path('list/',views.book_list),
]
1、如果反轉(zhuǎn)url的時(shí)候,需要添加參數(shù),那么可以傳遞kwargs參數(shù)到reverse函數(shù)中。
2、如果想要添加查詢字符串的參數(shù),則必須手動(dòng)的
進(jìn)行拼接。
# 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("首頁(yè)")
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("登錄頁(yè)面")
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///',views.article_detail,name='detail')
]
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。