1、环境搭建
在django中,视图负责与web请求进行交互
视图本质上是一个Python函数,定义在booktest/views.py。通过django1/urls.py路由到该视图中。
首先经过创建工程-命令行进入django3-配置数据库-创建数据库django3-创建应用-把booktest应用写入setting文件,下面开始配置路由:
booktest/views.py
from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): print(‘view hello‘) #在命令行里输出 return HttpResponse(‘haha‘) #在浏览器输出
在booktest目录下创建urls.py
booktest/urls.py
from django.conf.urls import url from . import views urlpatterns = [ url(‘^$‘,views.index) ]
在最外层的urls.py中引入子urls路由
django3/urls.py
urlpatterns = [ url(r‘^admin/‘, include(admin.site.urls)), url(‘‘, include(‘booktest.urls‘)) ]
启动服务器。在浏览器端输入 http://127.0.0.1:8080/booktest
可以看到
总体的路由如下:(settings.py入口)
2、路由的过程
当我们在URL中写入的时候
首先,解析器会把前面的协议、地址、端口号全部去掉。只剩下booktest一段。
进行匹配,与settings.py中的ROOT_URLCONF变量所对应的值进行匹配
对应django3/urls.py
显示了待匹配的url模板。这里指示如果待匹配的内容有”admin/”的话,使用admin.site.urls
另外如果待匹配的内容有”booktest/”,使用booktest.urls。对应booktest/urls.py
进入了booktest/urls.py还有urlpatterns待匹配。这里匹配的是“booktest/”后面的内容
因为待匹配的是^$,空字符串。所以实际上booktest后面为空,才能匹配上。
如果加上一句话
urlpatterns = [ url(‘^$‘,views.index), # 路由到views.py中的index()函数 url(‘^index‘, views.index) ]
表示可以匹配 “booktest/”或“booktest/index”。无论是哪个匹配上,都跳转到views.py中的index()函数。
要从url中捕获一个值。需要在该值的周围添加一个小括号。并在视图函数中,通过后续的参数进行捕获。比如:
booktest/urls.py
urlpatterns = [ url(‘^$‘,views.index), # 路由到views.py中的index()函数 url(‘^index‘, views.index), url(‘^(\d+)$‘, views.integer) ]
booktest/views.py
def integer(request, id): return HttpResponse(‘integer:%s‘ % id)
3、命名参数
在URL_PATTERNS中给要捕获参数指定变量名。在视图中通过对应的变量名捕获参数。
假设要访问 http://127.0.0.1:8080/booktest/9/14/2018 的时候,能够捕获到年月日。
booktest/urls.py
urlpatterns = [ url(‘^$‘,views.index), # 路由到views.py中的index()函数 url(‘^index‘, views.index), url(‘^(\d+)$‘, views.integer), url(‘^(?P<p2>\d+)/(?P<p3>\d+)/(?P<p1>\d+)$‘, views.date), ]
booktest/views.py
def date(request, p1, p2, p3): return HttpResponse(‘year: %s, month: %s, date:%s‘ % (p1, p2, p3))
4、命名空间和名称
include函数可以添加第二个参数,namspace,表示命名空间
urlpatterns = [ url(r‘^admin/‘, include(admin.site.urls)), url(‘booktest/‘, include(‘booktest.urls‘, namespace=‘booktest‘)) # 路由到booktest/urls.py ]
url函数可以添加第三个参数,name。表示名称
urlpatterns = [ url(‘^$‘,views.index), # 路由到views.py中的index()函数 url(‘^index‘, views.index, name="index"), ]
使用namspace和name可以在模板中去除关于urlconf的冗余信息。
参考前面的例子
templates/booktest/hero.html
<body> <ul> {%for book in bookList %} <li><a href="{%url ‘booktest:human‘ book.id %}">{{book.btitle}}</a></li> {%endfor%} </ul> </body>
这样即使修改了url中的路径,也不需要同时修改模板中的代码了。
5、404视图
当访问一个不存在的网页 http://127.0.0.1:8080/booktest/xxx 的时候,浏览器会显示
这个是django内部定义的一个404的视图。当网页找不到的时候,就会自动跳转到该视图中。
下面可以尝试修改这个404视图。在templates目录下创建一个文件404.html
templates/404.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>这里什么东西都没有!!</h1> </body> </html>
在配置文件中把模板的路径加上
django3/settings.py
TEMPLATES = [ { ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)], ‘APP_DIRS‘: True, ‘OPTIONS‘: { ‘context_processors‘: [ ‘django.template.context_processors.debug‘, ‘django.template.context_processors.request‘, ‘django.contrib.auth.context_processors.auth‘, ‘django.contrib.messages.context_processors.messages‘, ], }, }, ]
关闭调试信息。并允许所有主机都可以访问该网站
DEBUG = False ALLOWED_HOSTS = [‘*‘,]
6、500视图
500是指服务器错误。
当服务器的代码出现运行时的bug的时候,会显示500错误
在templates目录下创建500.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>服务器内部出现错误!!</h1> </body> </html>
在视图的代码中随便加点错误
booktest/views.py
def index(request): print(‘hello‘) 花洒打机佬咖啡馆哈快点江老师更好看了解导师 return HttpResponse(‘hello‘)
为了后面的代码调试方便,还是要把调试功能打开
DEBUG = True ALLOWED_HOSTS = []
原文地址:https://www.cnblogs.com/kumata/p/9672255.html