Django:视图views(一)
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 = []
Django:视图views(一)的更多相关文章
- Django基础之视图(views)层、模板层
目录 Django基础之视图(views)层.模板层 JsonResponse 向前端返回一个json格式字符串的两种方式 重写Django中的json的某个方法 form表单上传文件 FBV与CBV ...
- 【Django笔记1】-视图(views)与模板(templates)
视图(views)与模板(templates) 1,视图(views) 将接收到的数据赋值给模板(渲染),再传递给浏览器.HTML代码可以直接放在views.py(文件名可任意更换),也可以放在t ...
- django 中的视图(Views)
Views Django中views里面的代码就是一个一个函数逻辑, 处理客户端(浏览器)发送的HTTPRequest, 然后返回HTTPResponse, http请求中产生两个核心对象: http ...
- [diango]理解django视图工作原理
前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...
- Django 2.0 学习(03):Django视图和URL(下)
接上篇博文,继续分析Django基本流程. 编写第一个(view)视图函数 1.打开文件polls/views.py,输入下面的Python代码: from django.http import Ht ...
- 如何在django视图中使用asyncio(协程)和ThreadPoolExecutor(多线程)
Django视图函数执行,不在主线程中,直接 loop = asyncio.new_event_loop() # 更不能loop = asyncio.get_event_loop() 会触发 Runt ...
- Django 视图系统
Django 视图系统 概念 一个视图函数,简称视图,是一个简单的Python函数,用于接受Web请求并返回Web响应. 通常将视图函数写在project或app目录中的名为views.py文件中 简 ...
- Django视图层之路由配置系统(urls)
视图层之路由配置系统(urls) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个U ...
- 1.2、Django 视图与网址__进阶
Django 视图与网址进阶 1.1.简单使用: 把我们新定义的app加到settings.py中的INSTALL_APPS中 修改 HelloDjango/HelloDjango/settings. ...
- django视图缓存的实现
django视图缓存的实现 1,安装 pip install django-redis setting.py CACHES = { "default":{ "BACKEN ...
随机推荐
- Swift ARC 自动引用计数
1.ARC 引用类型在堆上的内存分配过程中有 8 字节的地址长度用来保存对象的引用计数,堆上的内存并不像栈上那样立即进行回收,系统会定时对堆上的内存进行检查,当某个实例不再被使用时,引用计数会变为 0 ...
- Kriging插值法
克里金法是通过一组具有 z 值的分散点生成估计表面的高级地统计过程.与插值工具集中的其他插值方法不同,选择用于生成输出表面的最佳估算方法之前,有效使用克里金法工具涉及 z 值表示的现象的空间行为的交互 ...
- MUI class="mui-switch"开关 JQuery 控制开关
<div class="mui-switch mui-active"> <div class="mui-switch-handle">& ...
- Chrome F12 温故而知新 :因为重定向导致清空Network信息
虽然我以前都是用Fiddler 4来作为解决方案.但实际上可以勾选 [Preserve log]来保存日志 这样就不担心因为页面重定向导致清空了日志了
- Spring Boot 2.0 整合Thymeleaf 模板引擎
本节将和大家一起实战Spring Boot 2.0 和thymeleaf 模板引擎 1. 创建项目 2. 使用Spring Initlizr 快速创建Spring Boot 应用程序 3. 填写项目配 ...
- 使用vw做移动端页面的适配
Flexible到今天也有几年的历史了,解救了很多同学针对于H5页面布局的适配问题.而这套方案也相对而言是一个较为成熟的方案.简单的回忆一下,当初为了能让页面更好的适配各种不同的终端,通过Hack手段 ...
- 浏览器对HTML5特性检測工具Modernizr
近期在做公司移动端运营的项目,需求中多处地方都会涉及动画. 相信非常多前端开发都会有这样的感触,对CSS3中的动画属性非常熟悉,可是因为对动画运动过程的理解不深入,经常仅仅能望而止步.CSS3中动画这 ...
- mysql 存储引擎对索引的支持
一.首先给出mysql官方文档给出的不同存储引擎对索引的支持 从上面的图中可以得知,mysql 是支持hash索引的,但支持和不支持又和具体的存储引擎有关系.从图中看到InnoDB是支持Btree索引 ...
- 《CLR via C#》读书笔记 之 泛型
第十二章 泛型 2014-06-15 初始泛型 12.3 泛型基础结构 12.3.1 开放类型与封闭类型 12.3.2 泛型类型和继承 12.3.3 泛型类型同一性 12.3.4 代码爆炸 12.6 ...
- 跨控制器跳转view——RedirectToRoute和RedirectToAction
已知控制器AccountController.cs和HomeController.cs,如果从页面Account/Login直接跳转到Home/Index,可以利用RedirectToRoute和Re ...