一、项目路由
在settings中配置了项目路由
ROOT_URLCONF = ‘demo1.urls’

在项目路由urlpatterns中通过include函数引入应用路由配置文件
url(‘book/’,include(‘book.urls’))

二、应用路由
在应用路由中urlpatterns通过url函数引入每一个子路由

三、定义视图函数(带有两个参数)
def detail(request,offset,limit):
print(offset,limit)
return HttpResponse(“detail”)

四、定义位置参数路由
url(’^detail/(\d+)/(\d+)/$’, detail),

五、定义关键字参数路由
url(’^detail/(?P\d+)/(?P\d+)/$’,detail),

关键字参数路由中 正则分组别名需要与视图函数中形参名一致

FBV


一、视图函数FBV
每一个路由均需要绑定视图函数
当访问该路由时django会执行绑定的视图函数
同时将路由中提取到的参数赋予视图函数形参

二、视图类CBV
使用基于类的视图提升代码的复用
常用的视图类
from django.views.generic import View,TemplateView,ListView,CreateView,DetailView,DeleteView,UpdateView

案例1
扩展View

url(r’^myview/$’, MyView.as_view(), name=‘book’),

class MyView(View):
def get(self,request):
return HttpResponse(“扩展View”)


投票详情页 把视图函数改成视图类(继承View)

详情页


案例2
url(r’^mytemplateview/$’, MyTemplateView.as_view(), name=‘book’),

class MyTemplateView(TemplateView):
template_name = “mytemplateview.html”

案例3
url(r’^mylistview/$’, MyListView.as_view(), name=‘book’),

class MyListView(ListView):
template_name = “mylistview.html”
# model = Hero
# queryset = Hero.objects.all().filter(pk__gt=3)
def get_queryset(self):
return Hero.objects.all()

# context_object_name = "heros"
def get_context_object_name(self, object_list):return "heros"

投票首页 把视图函数改成视图类(继承ListView)

案例4
url(r’^mydetailview/(?P\d+)/$’, MyDetailView.as_view(), name=‘book’),

class MyDetailView(DetailView):
template_name = “mydetailview.html”
model = Hero
context_object_name = “hero”
def get_object(self, queryset=None):
obj = super(MyDetailView,self).get_object(queryset)
obj.age = 20
return obj

特殊视图

一、媒体资源(等后期)

二、404页面
1,在templates中创建404.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>404</title>
</head>
<body><h1>你访问的页面 {{request_path}} 不存在</h1><hr/>
</body>
</html>

2,当发起请求路由没有匹配成功则会触发404模板

3,默认的404视图将传递一个变量给模板:request_path,它是导致错误的URL

4,如果在settings中DEBUG设置为True,那么将永远不会调用404视图,而是显示URLconf 并带有一些调试信息

5,在settings.py中修改调试
DEBUG = False
ALLOWED_HOSTS = [’*’, ]

404页面


三、500页面
1,在templates中创建500.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>500</title>
</head>
<body><h1>服务端开小车了.......</h1><h2>请刷新后重试</h2>
</body>
</html>

2,在视图代码中出现运行时错误

3,如果在settings中DEBUG设置为True,那么将永远不会调用500视图,而是显示URLconf 并带有一些调试信息

4,在settings.py中修改调试
DEBUG = False
ALLOWED_HOSTS = [’*’, ]

项目未完成,记得开启DEBUG

HttpRequest对象

服务器接收到http协议的请求后,会根据报文创建HttpRequest对象
视图函数的第一个参数必须是HttpRequest对象

一、属性
下面除非特别说明,属性都是只读的
path:一个字符串,表示请求的页面的完整路径,不包含域名
method:一个字符串,表示请求使用的HTTP方法,常用值包括:‘GET’、‘POST’

GET:一个类似于字典的对象,包含get请求方式的所有参数
POST:一个类似于字典的对象,包含post请求方式的所有参数
FILES:一个类似于字典的对象,包含所有的上传文件
COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串
session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见“状态保持”
META:封装了本地请求所有的头部信息

二、方法
is_ajax():如果请求是通过XMLHttpRequest发起的,则返回True

三、QueryDict对象
request对象的属性GET、POST都是QueryDict类型的对象
与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
方法get():根据键获取值
只能获取键的一个值
如果一个键同时拥有多个值,获取最后一个值
dict.get(‘键’,default)
方法getlist():根据键获取值
将键的值以列表返回,可以获取一个键的多个值
dict.getlist(‘键’,default)

一、HttpResponse对象

在django.http模块中定义了HttpResponse对象的API
HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建

0,HttpResponseBase所有响应的父类不可以直接使用

1,HttpResponse 普通响应类 继承HttpResponseBase

HttpResponseRedirectBase 重定向 继承HttpResponse
3开头 代表重定向
HttpResponseRedirect 重定向 继承HttpResponseRedirectBase 302临时重定向

HttpResponsePermanentRedirect 重定向 继承HttpResponseRedirectBase 301永久重定向

HttpResponseNotModified 继承HttpResponse 资源未更改 304
4开头都是请求出错

HttpResponseBadRequest 继承HttpResponse 400请求出错

HttpResponseForbidden 继承HttpResponse 403禁止请求

HttpResponseNotFound 继承HttpResponse 404未找到页面

HttpResponseNotAllowed 继承HttpResponse 405禁止请求方法

HttpResponseGone 继承HttpResponse 410资源以移除

5开头是各种服务器错误
HttpResponseServerError 继承HttpResponse 500 服务端出错

JsonResponse 继承HttpResponse 返回Json数据

2,StreamingHttpResponse 流式响应类 继承HttpResponseBase

FileResponse 文件响应类 继承StreamingHttpResponse

FileResponse(open(“book/MVT.png”,“rb”),content_type=“image/png”,filename=“aa.png”,as_attachment=True)
FileResponse(open(“book/python面试.docx”,“rb”),content_type=“application/msword”,filename=“python.docx”,as_attachment=True)

一、状态保持
http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据

存储方式包括cookie、session

使用cookie,所有数据存储在客户端,注意不要存储敏感信息
使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
推荐使用session

二、使用Cookie
cookie是由服务器生成,存储在浏览器端的一小段文本信息。

cookie的特点:
以键值对方式进行存储。
通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给该网站的服务器。
服务端获取请求所携带的cookie 可以使用 request.COOKIES
cookie是基于域名安全的。www.baidu.com www.tudou.com之间的cookie互不影响
cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期。

在响应中设置
res = HttpResponse()
res.set_cookie(key=“username”, value=“zzy”, expires=timezone.now()+timedelta(days=7))

在响应中清除
res.delete_cookie(key=“username”)

从请求中获取
name = request.COOKIES.get(“username”)

三、使用session
session存储在服务器端。

session的特点:
session是以键值对进行存储的。
session依赖于cookie。唯一的标识码保存在sessionid cookie中。
session也是有过期时间,如果不指定,默认两周就会过期。

设置
request.session[“username”] = “zzy”
request.session.set_expiry(606024*7)

获取
request.session.get(“username”)

清除
request.session.flush()

四、session的存储

在settings.py文件中

项INSTALLED_APPS列表中添加:
‘django.contrib.sessions’,
项MIDDLEWARE_CLASSES列表中添加:
‘django.contrib.sessions.middleware.SessionMiddleware’,

可以使用settings.py的SESSION_ENGINE项指定

基于本地数据库
SESSION_ENGINE=‘django.contrib.sessions.backends.db’

基于缓存
SESSION_ENGINE=‘django.contrib.sessions.backends.cache’

缓存和数据库同时使用
SESSION_ENGINE=‘django.contrib.sessions.backends.cached_db’

基于数据库的太慢,基于缓存的容易丢失
那么最好使用基于redis的内存数据库最好

需要安装模块
pip install django-redis-sessions

修改settings中的配置,增加如下项
SESSION_ENGINE = ‘redis_sessions.session’
SESSION_REDIS_HOST = ‘localhost’
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 0
SESSION_REDIS_PASSWORD = ‘’
SESSION_REDIS_PREFIX = ‘session’

可以通过redis-cli查看

Django MVT详细说明(二)视图V相关推荐

  1. Django MVT详细说明(三)模板T

    模板使用 一.模板介绍 1,作为Web框架,Django提供了模板,可以很便利的动态生成HTML 2,模版系统致力于表达外观,而不是程序逻辑 3,模板的设计实现了业务逻辑(view)与显示内容(tem ...

  2. Python 框架 之 Django MVT 下的 V 的 视图简单介绍和使用

    Python 框架 之 Django MVT 下的 V 的 视图简单介绍和使用 目录

  3. linux时间后mvt,Django MVT架构

    Web框架中的一些概念 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model模型,主要 ...

  4. Django MVT

    一.C/S   B/S CS服务器-客户机,即Client-Server(C/S)结构.C/S结构通常采取两层结构.服务器负责数据的管理,客户机负责完成与用户的交互任务.客户机通过局域网与服务器相连, ...

  5. as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]

    系列文章介绍 本系列文章将详细介绍将Django官方引导教程中的投票项目改写为RESTful网络服务.Django官方教程地址https://docs.djangoproject.com/zh-han ...

  6. pyhton GUI编程之Tkinter详细讲解二

    文章目录 Tkinter详细讲解 pyhton GUI编程之Tkinter详细讲解二 4. 组件用法 4.1 文本输入和输出相关控件 4.1.1 Lable标签 4.1.2 Message消息 4.1 ...

  7. DRF (Django REST framework) 中的视图类

    视图说明 1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父 ...

  8. oracle 关系 表 视图_oracle动态视图v$,v_$,gv$,gv_$与x$之间的关系

    前言:在oracle运维的过程中,经常会使用到一些以V$开头的动态视图,比如V$session, 有一次偶然看到有人用V_$session, 初以为别人写错了,没想到desc v_$session以后 ...

  9. oracle v$system_event,45.Oracle杂记——Oracle常用动态视图v$system_event

    45.Oracle杂记--Oracle常用动态视图v$system_event 视图v$system_event 显示一个事件的总共等待. 如果不支持计时机制,那么TIME_WAITED和AVERAG ...

最新文章

  1. 深度学习 自组织映射网络 ——python实现SOM(用于聚类)
  2. 原HP大中华区总裁孙振耀的退休感言
  3. rstudio python_如虎添翼:用Python与C++扩展R语言的应用场景
  4. 深入浅出学Hive:Hive参数
  5. 疯狂html5+css3+javascript讲义 pdf_成为一名优秀的HTML5前端工程师需要掌握哪些技能?...
  6. x264 移植到 ARM的方法
  7. 带你了解家居智能的心脏:物联网关
  8. 乐山市计算机学校欺骗,据说这个学校很乱。
  9. onvif device manager 找不到ipc_常见网络摄像机IP搜索不到可能导致的问题及解决办法汇总...
  10. Vue 学习笔记(4)Vue-cli4 项目搭建 + 目录结构 + 项目打包、部署
  11. 学习python的好处
  12. Oracle官网下载速度慢
  13. 吴恩达深度学习教程参考链接
  14. C++实现各种进制转换
  15. [恒指赵鑫] 为什么恒指是2019年最火最受欢迎的交易品种?
  16. 关于广义相对论与量子力学之我见
  17. 天梵古法健康知识普及:手少阴心经经穴
  18. 【中秋系列】马上中秋了,给老板写了个猜灯谜小脚本,猜到的越多奖金就越高?赚翻了~
  19. linux 变量替换字符串,shell中常用的变量处理、字符串操作(之一)
  20. 企立方:拼多多关键词出价多少合适

热门文章

  1. 辞旧迎新,2013年年终感言
  2. “公正”与“公平”之辨
  3. DY-SV17F语音播放模块应用篇一 【IO独立模式】
  4. 科普文章-另一个视角解读计算机编码(修订版)【一个吊丝的个人理解】
  5. jira 切换 语言_JIRA中的标记语言的语法参考
  6. odbc找不到服务器ip,[转载]不需ODBC可由IP地址与端口号建立与SQLSERVER的连接
  7. mybatis query 对象 or 查询
  8. 机器学习入门1--初识机器学习
  9. 如何快速找到不与任何道路相连的路
  10. 老板带头反内卷,阿尔卑斯滑雪团建。。。别错过这一波上车机会