目錄
一、django項目結構
1、manage.py
基於此文件與項目交互操作,在終端輸入:python manage.py [子命令]
manage.py子命令列表:python manage.py help
2、setting.py:保存項目的配置信息
3、urls.py:實現url與視圖函數映射,接收到請求,在此文件中找到對應的視圖函數。
4、wsig.py:部署項目。
二、django項目規範
按照功能或者模塊進行分層,分成一個個app,所有和這個模塊相關的視圖寫在對應app的views.py中,並且模型和其他的也類似。
django創建APP:CMD進入到項目目錄,執行python manage.py startapp [app名稱]
APP是一個python包。包有django約定固定名稱文件,如__init__py、views.py、models.py、admin.py、tests.py、apps.py、migrations包等。
在項目下右鍵,新建——python package(不是directory),目錄與python包區別是python包中有一個__init__.py文件。
三、URL分發器
URL dispatcher | Django documentation | Django https://docs.djangoproject.com/en/2.2/topics/http/urls/
1、視圖函數:一般寫在app的views.py中。
視圖函數的第一個參數必須是request(一個HttpRequest)對象。這個對象存儲了請示的信息,包括攜帶的參數及頭部信息。
from django.http import HttpResponse
from django.db import connection # 獲取django的connection對象,自動獲取settings.py中的數據庫配置信息。
from django.shortcuts import render, redirect, reverse
from znwork.models import ReportZnWork
def get_cursor():
return connection.cursor()
def znwork_addrecords(request):
if request.method == 'GET':
print('dsssss')
return render(request, "znwork_addrecords.html")
else:
print('dddd')
name1 = request.POST.get("name1")
name2 = request.POST.get("name2")
print("口味來了:", name1, name2)
cur2 = get_cursor()
cur2.execute("insert into dailyreport(znwork_id,班組,產量) values(null,'%s','%s')" % (name1, name2))
aaa = ReportZnWork(Teams=name1, Output=name2)
aaa.save()
return redirect(reverse(index1))
視圖函數的返回值必須是:HttpResponse或其子類的對象,django.http.response.HttpResponseBase的子類的對象。
在views.py文件中,找到from django.http import HttpResponse行,光標移動至httpresponsebase上面,按下Ctrl+B,可調出該類的相關內容。
2、URL映射(urls.py文件實現):
視圖與URL映射。即用戶在瀏覽器中輸入url時,可以請示到這個視圖函數。django在urls.py的rulpatterns變量中讀取匹配規則,匹配規則用django.urls.path函數進行包裹,這個函數根據傳入的參數返回URLPattern或者RULResolver的對象。
urls.py文件內容:
from django.contrib import admin
from django.urls import path
from znwork.views import index1
from znwork.views import *
urlpatterns = [
path('', index1),
path('zn/', znwork_addrecords),
path('admin/', admin.site.urls),
path('d/d/', index1)
path函數:path(route,view,name-none,kwargs-none)
route:url的匹配規則。指定url中要傳遞的參數,
如:訪問文章詳情頁時,通過<>來指定傳遞一個(可指定類型)參數id,<int:id>。
參數類型:
str:非空的字符串類型。默認的轉換器,不能包含斜槓。
int:匹配任意的正整數或零;slug:由英文中的橫槓、或者下劃線連接英文字符或數字組成的字符串;uuid:匹配uuid字符串、path:匹配非空的英文字符串,可以包含斜槓。
view:匹配任意的視圖函數或者是類視圖.as_view(),或者是django.urls.include()函數的返回值。
name:爲此url命名。在項目較大,url較多時用途較大。
kwargs:在需要時,可爲視圖函數傳遞一些額外參數。這個參數接收一個字典,作爲一個參數傳至視圖函數中去。
四、urls.py中path路徑設置一些問題
問題1:Django - The current URL, didn't match any of these
在urls.py中設置:path('/a', f_a),目的:瀏覽器地址欄:http://127.0.0.1:8000/a,執行f_a這個視圖函數。
提示如下錯誤
Request Method: | GET |
---|---|
Request URL: | http://127.0.0.1:8000/a |
瀏覽器地址欄輸入http://127.0.0.1:8000//a,可以正常訪問。
將urls.py中改爲path('a/',f_a),瀏覽器地址欄輸入http://127.0.0.1:8000/a,可以正常訪問。