目录
一、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,可以正常访问。