django網頁製作(4)django項目的應用APP——APP結構

目錄

一、django項目結構

二、django項目規範

三、URL分發器

四、urls.py中path路徑設置一些問題


 

一、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,可以正常訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章