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(一)的更多相关文章

  1. Django基础之视图(views)层、模板层

    目录 Django基础之视图(views)层.模板层 JsonResponse 向前端返回一个json格式字符串的两种方式 重写Django中的json的某个方法 form表单上传文件 FBV与CBV ...

  2. 【Django笔记1】-视图(views)与模板(templates)

    视图(views)与模板(templates) 1,视图(views) ​ 将接收到的数据赋值给模板(渲染),再传递给浏览器.HTML代码可以直接放在views.py(文件名可任意更换),也可以放在t ...

  3. django 中的视图(Views)

    Views Django中views里面的代码就是一个一个函数逻辑, 处理客户端(浏览器)发送的HTTPRequest, 然后返回HTTPResponse, http请求中产生两个核心对象: http ...

  4. [diango]理解django视图工作原理

    前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...

  5. Django 2.0 学习(03):Django视图和URL(下)

    接上篇博文,继续分析Django基本流程. 编写第一个(view)视图函数 1.打开文件polls/views.py,输入下面的Python代码: from django.http import Ht ...

  6. 如何在django视图中使用asyncio(协程)和ThreadPoolExecutor(多线程)

    Django视图函数执行,不在主线程中,直接 loop = asyncio.new_event_loop() # 更不能loop = asyncio.get_event_loop() 会触发 Runt ...

  7. Django 视图系统

    Django 视图系统 概念 一个视图函数,简称视图,是一个简单的Python函数,用于接受Web请求并返回Web响应. 通常将视图函数写在project或app目录中的名为views.py文件中 简 ...

  8. Django视图层之路由配置系统(urls)

    视图层之路由配置系统(urls) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个U ...

  9. 1.2、Django 视图与网址__进阶

    Django 视图与网址进阶 1.1.简单使用: 把我们新定义的app加到settings.py中的INSTALL_APPS中 修改 HelloDjango/HelloDjango/settings. ...

  10. django视图缓存的实现

    django视图缓存的实现 1,安装 pip install django-redis setting.py CACHES = { "default":{ "BACKEN ...

随机推荐

  1. 格雷码(Gray code)仿真

    作者:桂. 时间:2018-05-12  16:25:02 链接:http://www.cnblogs.com/xingshansi/p/9029081.html 前言 FIFO中的计数用的是格雷码, ...

  2. FFmpeg: AVCodecParameters 结构体分析

    /** * This struct describes the properties of an encoded stream. * * sizeof(AVCodecParameters) is no ...

  3. python prettytable模块

    简介 Python通过PrettyTable模块可以将输出内容如表格方式整齐地输出. 安装 pip install prettytable 1 示例 from prettytable import P ...

  4. 【Spark 深入学习 07】RDD编程之旅基础篇03-键值对RDD

    --------------------- 本节内容: · 键值对RDD出现背景 · 键值对RDD转化操作实例 · 键值对RDD行动操作实例 · 键值对RDD数据分区 · 参考资料 --------- ...

  5. ECMAScript 6 入门之Proxy代理和set

    1.Proxy代理 1. var user={ full_name:function () { return this.fname+" "+this.lname; } }; use ...

  6. 使用SharedPreference和对象流存储对象

    编写PreferencesUtils工具类可以简单对象(可以缓存对象中所有public的简单属性)   另外研究了Preference存储与直接采用对象文件缓存方式的区别 第一次写文件时 1.效率,直 ...

  7. 解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o...

    解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o... ...

  8. [转]ztree出现$.fn.zTree is undefined错误的解决办法。

    原文地址:https://blog.csdn.net/smallboy2011/article/details/20554269 问题描述,在一个界面使用ztree创建树,提示TypeError: $ ...

  9. 要是VISUAL STUDIO 2015带这些功能就好了

    visual studio 2015 正式版立即就要出来了,事实上我原来满期待微软能出一套完美的移植的ANDROID和IOS应用的技术方案,这样WIN10正式版出来后,有一套比較好的移植框架,大家能够 ...

  10. Java知多少(58)线程Runnable接口和Thread类详解

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...