django 视图模式
一 视图
- FBV --- function based view(基于函数视图)
- CBV --- class based view(基于类的视图函数)
二 请求方式
- get
- post
- put/patch
- delete
- head
- option
三 基于CBV的简单演示实例
- urls.py
from django.contrib import admin
from django.urls import path from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', views.LoginView.as_view()),
path('books/', views.BookView.as_view()),
]
- views.py文件
from django.shortcuts import render,HttpResponse # Create your views here. import json #第一步导包
from django.views import View
#自定义一个类接口,必须继承View
class LoginView(View): def dispatch(self, request, *args, **kwargs):
print("接受请求...")
ret=super().dispatch(request, *args, **kwargs)
return ret
def get(self,request):
return render(request,"login.html") def post(self,request): print(request.POST.get("user"))
print(request.POST.get("pwd"))
return HttpResponse("OK") def delete(self,request): return HttpResponse("delete...") class BookView(View): def get(self,request):
book_list=["python","linux","go"]
return HttpResponse(json.dumps(book_list))
- login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form action="" method="post">
{% csrf_token %}
用户名:<input type="text" name="user">
密码:<input type="password" name="pwd">
<input type="submit">
</form>
</body>
</html>
四 from django.views import View 源码解析
1 步骤一
执行urls.py中的 path('login/', views.LoginView.as_view())
2 步骤二
先在自己定义LoginViews类中查找as_iew(),找不到再到父类中查找
def as_view(cls, **initkwargs):
"""Main entry point for a request-response process.""" #...看不懂的省略。
def view(request, *args, **kwargs):
#...看不懂的省略。
return self.dispatch(request, *args, **kwargs)
view.view_class = cls
view.view_initkwargs = initkwargs #...看不懂的省略。
return view #这就是我们要找的,返回一个函数
这一步的结果:
path('login/', views.LoginView.as_view())---》path('login/', View.view),
3 步骤三
#执行view代码
def view(request):
#看不懂代码省略 return self.dispatch(request, *args, **kwargs) #返回一个分发函数的结果
4 步骤四
def dispatch(request, *args, **kwargs):
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs) #返回执行结果
此步骤:根据请求方式分发给不同的执行函数
5 步骤五
执行请求方式对应的函数,先从自己的类(LoginView)中寻找。

没找到就执行父类的方法

注意:self代表的是LoginView类
django 视图模式的更多相关文章
- Django视图层之路由配置系统(urls)
视图层之路由配置系统(urls) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个U ...
- Django 2.0 学习(07):Django 视图(进阶-续)
接Django 2.0 学习(06):Django 视图(进阶),我们将聚焦在使用简单的表单进行处理和精简代码. 编写简单表单 我们将用下面的代码,来替换之前的detail模板("polls ...
- [diango]理解django视图工作原理
前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...
- virtaulbox视图模式常用切换
virtaulbox发现菜单不见,如何切换视图模式呢? 很简单,通过快捷键主机(host)键 Host+F 换到全屏模 ...
- MWeb 1.6 发布!Dark Mode、全文搜寻、发布到Wordpress、Evernote 等支持更新、编辑/预览视图模式等
Dark Mode 使用 View - Dark Mode 或快捷键 CMD + Option + L 开启或关闭 Dark Mode.可以在设置中设置 Dark Mode 状态下编辑器所使用的样式, ...
- CSSOM视图模式
相关技术文章: CSSOM视图模式(CSSOM View Module)相关整理 W3C CSSOM View Module
- 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文件中 简 ...
随机推荐
- 『追捕盗贼 Tarjan算法』
追捕盗贼(COCI2007) Description 为了帮助警察抓住在逃的罪犯,你发明了一个新的计算机系统.警察控制的区域有N个城市,城市之间有E条双向边连接,城市编号为1到N. 警察经常想在罪犯从 ...
- 带着萌新看springboot源码12(启动原理 下)
先继续接上一篇,那个启动原理还有一点没说完. 6. afterRefresh(context, applicationArguments); 看这个名字就知道,应该就是ioc容器刷新之后的一些操作了, ...
- 设计模式总结篇系列:抽象工厂模式(Abstract Factory)
在上一篇的工厂方法模式中,通过一个公用的类对其他具有相同特性(实现相同接口或继承同一父类)的类的对象进行创建.随之带来的问题在于:当新定义了一个具有相同特性的类时,需要修改工厂类.这与设计模式中的开闭 ...
- Java开发知识之Java中的集合上List接口以及子类讲解.
Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...
- Python3+Selenium2完整的自动化测试实现之旅(六):Python单元测试模块Unittest运用
一.Unittest单元测试框架简介 Unitest是Python下的一个单元测试模块,是Python标准库模块之一,安装完Python后就可以直接import该模块,能在单元测试下编写具体的测试用例 ...
- python之错误调试
无论谁写的程序,必定会存在bug,解决bug需要我们去调试程序.于是乎,在Python中,就会好几种调试手段,如print.assert.logging.pdb.pdb.set_trace() 一.使 ...
- 从零开始学安全(三十五)●mysql 盲注手工自定义python脚本
import requests import string #mysql 手动注入 通用脚本 适用盲注 可以跟具自己的需求更改 def home(): url="url" list ...
- Android安全–Dex文件格式详解
Dex文件是手机上类似Windows上的EXE文件,dex文件是可以直接在Dalvik虚拟机中加载运行的文件. 首先我们来生成一个Dex文件. 新建文件Hello.java内容如下: class He ...
- 【20190405】JavaScript-正则式匹配与替换结果解析
在正则式的应用中有三个函数使用得最多:exec().test()与字符串的replace(reg, options).其中test()最简单,只要字符串与正则式可以匹配,就返回true,否则返回fal ...
- Dynamics 365测试和启用邮箱时候一直显示“安排电子邮件配置测试”怎么办?
摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复284或者20181125可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me ...