新聞中心
Django
遵循MVC設計模式的框架,MVC是Model、View、Controller的三個單詞的簡寫。分別代表模型、視圖、控制器。
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設計、做網(wǎng)站、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務交口,十載網(wǎng)站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108
創(chuàng)建項目
- 通過命令行方式,首先進入到安裝了Django的虛擬環(huán)境中
- 通過pycharm方式
# 創(chuàng)建項目 1、命令行:django-admin startproject [項目名稱] 2、pycharm方式:文件->創(chuàng)建項目->選擇django。然后指定項目所在的路徑,以及python解釋器。 #運行項目 python manage.py runserver 可添加端口 python manage.py runserver 8088 對公訪問 python manage.py runserver 0.0.0.0 8088
項目結構介紹
- manage.py:和項目交互都基于這個文件,python manage.py [子命令]
- settings.py:本項目的設置項,所有和項目相關的配置都是放在這個里面
- urls.py:用來配置URL路由的,比如訪問http://127.0.0.1/news/ 是訪問新聞列表頁,這些東西就需要在這個文件中完成。
- wsgi.py:項目與WSGI協(xié)議兼容的web服務器入口,部署的時候需要用到的,一般情況下也是不需要修改的。
創(chuàng)建app
python manage.py startapp django_1
視圖函數(shù)
- 視圖函數(shù)的第一個參數(shù)必須是request,這個參數(shù)不能少
- 視圖函數(shù)的返回值必須是
django.http.response.HttpResponseBase的子類的對象。
URL傳遞參數(shù)
- url映射
- 要去urls.py文件中尋找映射是因為在settings.py文件中配置了
ROOT_URLCONF為urls.py。所有的django會去urls.py中尋找。 - 在
urls.py中我們所有的映射都應該放在urlpatterns這個變量中。 - 所有的映射不是隨便寫的,而是使用
path函數(shù)或者是re_path函數(shù)進行包裝的。
- 要去urls.py文件中尋找映射是因為在settings.py文件中配置了
- url傳參數(shù)
- 采用在url中使用變量的方式:在path的第一個參數(shù)中,使用
<參數(shù)名>的方式傳遞參數(shù),然后在視圖函數(shù)中也要寫一個參數(shù)。視圖函數(shù)中的參數(shù)必須和url中的參數(shù)名稱保持一致,不然找不到這個參數(shù)。 - 采用查詢字符串的方式:在url中不需要單獨的匹配查詢字符串的部分,只需要在視圖函數(shù)中使用
request.GET.get('參數(shù)名稱')的方式來獲取。代碼如下:def author_detail(request): author_id = request.GET['id'] text = '作者的id是:%s' % author_id return HttpResponse(text)因為查詢字符串使用的是
GET請求,所以我們通過request.GET來獲取參數(shù),并且因為GET是一個類似于字典的數(shù)據(jù)類型,所有獲取值跟字典的方式都是一樣的。
- 采用在url中使用變量的方式:在path的第一個參數(shù)中,使用
url命名
- 需要url命名的原因
因為url是經常變化的,寫死可能會經常修改代碼。給url取個名字以后使用url的時候就使用它的名字進行反轉就可以了。 如何給一個url指定名稱
在path函數(shù)中,傳遞一個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('首頁') else: return redirect(reverse('login'))應用命名空間
在多個app之間,有可能產生同名的url。這時為了避免反轉url的時候產生混淆,可以使用應用命名空間來做區(qū)分。定義應用命名空間非常簡單,只要在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可以創(chuàng)建多個實例,可以使用多個url映射同一個app。在做反轉的時候使用應用命名空間,那么就會發(fā)生混淆,為了避免這個問題就可以使用實例命名空間。在include函數(shù)中傳遞一個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')) ]
url分層模塊化
多個app后主app的urls.py里的urlpatterns會寫入過多路徑,可通過在app里創(chuàng)建自身app對應的urls.py來方便路徑轉發(fā)。
# 主urls.py,使用include函數(shù)包含子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/',views.book_detail),
path('list/',views.book_list),
]
reverse函數(shù)補充
1、如果反轉url的時候,需要添加參數(shù),那么可以傳遞kwargs參數(shù)到reverse函數(shù)中。
2、如果想要添加查詢字符串的參數(shù),則必須手動的
進行拼接。
# 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///',views.article_detail,name='detail')
]
網(wǎng)頁標題:Django基礎概念
網(wǎng)頁鏈接:http://www.dlmjj.cn/article/gihcjj.html


咨詢
建站咨詢
