然后,Django加载相应的视图,将这个HttpRequest对象作为第一个参数传递给视图函数。 每个视图负责返回一个HttpResponse对象。 ? ...之前都是FBV模式写的代码,所以就不写例子了。 CBV(class base views) 就是在视图里使用类处理请求。 ...在django1.3之前,generic view也就是所谓的通用视图,使用的是function-based-view(fbv),亦即基于函数的视图。...Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。 ...Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。
希望大家要么在创造阳光,要么在传递阳光。 ? 爬虫框架Scrapy(二) 1.请求和响应 1.为什么要三次握手? 答:本质原因是避免服务器空耗资源。...客户端和服务器开始传输数据,但是在交流的过程中如果丢的包又回来了,然后服务器开了一个线程进行连接客户端,同时向客户端发起连接请求,但是这个数据包失效了,客户端不会再发消息了,服务器会一直等待,空耗资源,...body:接收json字符串,为POST的数据,发送payload_post请求时使用。 5.web程序运行的基本流程: a.客户端发送请求。b.服务器返回响应。...c.MapAdapter:在浏览器中通过具体的url,适配具体的视图函数,满足url规则及请求方法,即调用对应的视图函数。 d.Baseconverter:转换器,负责在url地址中匹配参数。...端点默认是和视图函数同名的,因为使用的是装饰器实现的,自己手动实现路由,那么可以自己指定。 10.Flask中URL为什么使用列表?
类视图的引入 在Django中也可以使用类来定义一个视图,称为类视图。...self, request): return render(request, 'index.html') 配置路由时,使用类视图的as_view()方法来添加。...上面代码可以简化,djangi提供了render函数 render(request对象, 模板文件路径, 模板数据字典) from django.http import HttpResponse from...标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。 为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同。...init被调用了两次 原因: Django运行在调试模式下,中间件init部分有可能被调用两次。 4. 执行流程 ? 5.
在基于模板引擎的开发方式中,博客首页文章列表的视图函数可能是这样的: from django.shortcuts import render from .models import Post def..., 'blog/index.html', context={'post_list': post_list}) 在 django-rest-framework,代码逻辑是一样的,只是在最后返回结果时,返回资源序列化后的结果...为什么需要这个视图函数装饰器呢?之前说过,django-rest-framework 为 API 的开发提供了丰富的功能,包括内容协商、认证和鉴权、限流等等。...这些过程 django 默认的视图函数在处理 HTTP 请求时是没有提供的,而经过 api_view 装饰后的视图,则提供了上述全部功能。...现在我们已经有了视图函数,最后,我们需要给这个视图函数绑定 URL,在 blog 应用下的 urls.py 中加入绑定的代码: path('api/index/', views.index) 启动开发服务器
DRF对django视图配置流程图(个人画) ?...2 解析器组件 (用来解析数据的请求的组件) Django并不能处理请求协议为application/json编码协议的数据 注意: DRF解析器会封装到View中的parsers内,在视图函数被调用时...接口设计 url定义:需要为post新增url,因为根据规范,url定位资源,http请求方式定义用户行为 定义post方法:在视图类中定义post方法 开始序列化:通过我们上面定义的序列化类,创建一个序列化对象...程序启动,开始初始化,获取配置信息,获取视图类并加载到内存中,获取url及视图类的对应关系 开始绑定视图类和url的对应关系,执行as_view()方法 as_view()方法被执行的时候传递了参数,为字典形式...,它并没有重写dispatch方法 该方法返回视图函数view,注意在这个函数中有一个行 self = cls(**initkwargs), cls是视图类,执行视图函数时self就指向视图函数的实例对象
Django 用户系统内置了登录、修改密码、找回密码等视图,但是唯独用户注册的视图函数没有提供,这一部分需要我们自己来写。...编写用户注册表单 Django 已经内置了一个用户注册表单:django.contrib.auth.forms.UserCreationForm,不过这个表单的一个小问题是它关联的是 django 内置的...我们还希望用户注册时提供邮箱地址,所以在 fields 中增加了 email 字段。...设置 URL 模式 视图函数需要和对应的 URL 绑定,这样当用户访问某个 URL 时,Django 才知道调用哪个视图函数处理用户请求。...在这个目录下有模板文件所在的目录 templates/,于是利用os.path.join 把这两个路径连起来,构成完整的模板路径,Django 就知道去这个路径下面找我们的模板了。
方法返回的是dispatch这个方法的调用;调用这个方法的时候,里面进行了一个处理(先获取了请求方法request.method,然后再利用lower()方法转成小写,比如‘GET’变成‘get’,其实就是根据不同的请求方法获取类视图中对应的请求方法...2.1.3装饰器 给函数视图加装饰器: ? 给类视图加装饰器: 两种方式: 1、直接在url配置时手动调用装饰器函数来实现装饰器添加。...为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图。...在类视图中装饰 在类视图中使用为函数视图准备的装饰器时,不能直接添加装饰器,需要使用method_decorator将其转换为适用于类视图方法的装饰器。...'view 视图被调用') return HttpResponse('OK') 注意:在调试模式下,init部分有可能会被调用两次 2.2.2多个中间件代码执行顺序(了解) 多个中间件,init
关于创建应用以及 Django 的目录结构在 建立 Django 博客应用 中已经有过介绍。创建新的应用后一定要记得在 settings.py 里注册这个应用,Django 才知道这是一个应用。...我们知道每一个 URL 对应着一个 Django 的视图函数,于是 Django 调用这个视图函数,我们在视图函数中写上处理用户通过表单提交上来的数据的代码,比如验证数据的合法性并且保存数据到数据库中,...return redirect(post) 这个评论视图相比之前的一些视图复杂了很多,主要是处理评论的过程更加复杂。具体过程在代码中已有详细注释,这里仅就视图中出现了一些新的知识点进行讲解。...我们在表单的视图函数里传递了一个 form 变量给模板,这个变量就包含了自动生成 HTML 表单的全部数据。在 detail.html 中通过 form 来自动生成表单。...显示评论内容 在 detail 视图函数我们获取了全部评论数据,并通过 comment_list 传递给了模板。
我们可以给每个客户端的Cookie分配一个唯一的id,这样用户在访问时,通过Cookie,服务器就知道来的人是“谁”。...Django在设置session时是针对浏览器的,如果同一台电脑的同一浏览器,多用户登录时在数据库中只会产生一条记录,但是不影响各个用户对session值的取用。...说的直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法。...我们之前已经接触过一个csrf相关的中间件了?我们一开始让大家把他注释掉,再提交post请求的时候,就不会被forbidden了,后来学会使用csrf_token之后就不再注释这个中间件了。...process_request和process_response process_request有一个参数,就是request,这个request和视图函数中的request是一样的(在交给Django
Django是一个流行的开源Python Web框架,它提供了一个坚实的基础,帮助开发者快速构建功能丰富且高度定制的Web应用Django全套笔记地址: 请移步这里 共 10 章,31 子模块请求与响应学习目标掌握...))类视图 实现以函数的方式定义的视图称为函数视图在Django中还可以通过类来定义一个视图,称为类视图类视图 的使用定义一个类,继承Django提供的View类from django.views.generic...解决: 可以通过在视图函数中使用装饰器实现,如下为函数视图定义一个装饰器(在设计装饰器时,基本都以函数视图作为考虑的被装饰对象)def check_ip(view_fun): """装饰器:禁止黑名单...__(self, get_response=None)服务器启动,初始化中间件类时被调用,只执行一次process_request(self, request):在视图执行之前调用,注意:该方法可以返回...HttpResponse('hello django')执行结果init before 视图 ==index== after 视图注意:调试模式下 __init__ 方法会执行两次二、MiddlewareMixin
在阅读本篇之前,请记住一点「基于类的视图不会替代基于函数的视图」. 介绍 无论是类视图还是基于函数的视图, 最终绑定到 URL Conf 的都是函数. 为什么这么说?...如果我在代码里面, 显式的调用类视图必须这样做: Python return MyView.as_view()(request) 为了让代码显示更加自然, 有可读性,你可以这个函数分配给一个变量....你可以在django.views.generic引用它们....各种观点 #1 观点 「使用所有的通用视图(GV)」 此观点认为,Django 提供这些通用视图就是让减少开发的效率, 为什么不用呢?...结论 我觉得如果是初学者在做线上项目,在不了解面向对象时适用函数式编程是个好的选择,无论是对于以后维护还是开发阶段,都能 hold 住。
'users.apps.UsersConfig', ] ''' 3、创建视图 创建 # 在views.py中编写视图代码 from django.http import HttpResponse def...五、类视图与中间件 1、类视图 定义:使用类来定义的视图 好处: 可读性好 更高的复用性 使用 from django.view.generic import View 配置路由时,使用类视图的as_view...()方法来添加 原理 在注册路由规则时类.as_view()返回方法名 在请求路径与正则匹配成功后,方法会被执行 调用dispatch()方法 根据请求方式名称获取方法 执行方法 使用装饰器...运行在调试模式下,中间件init部分有可能被调用两次。...html文本字符串 Django提供了一个函数render可以简写上述代码。
__()之后被执行 它有两个参数: post_init(sender, instance) sender:同上,创建实例的模型类 instance:创建的实例 3)pre_save() django.db.models.signals.pre_save...这个信号通常是在Django内部使用,一般不会被第三方应用使用。...值得一提的是,在测试过程中,我们的ready()函数可能不止一次被执行,因此我们要保护我们的信号不要被复制。...如我们使用信号在保存模型时发送电子邮件,则传递唯一标识符作为dispatch_uid参数,以识别接收函数。这个标识符通常是一个字符串。...”my_unique_identifier”) 如我们注册时保存密码需要用到post_save,新建my_signals.py,在文件中加入下面代码: from django.db.models.signals
Django 统一异常处理 在 Django 项目中可以自定义 中间件类 继承 django.middleware.common 下的 MiddlewareMixin 中间件类,重写 process_exception...process_exception 方法介绍 process_exception 方法只有在视图函数中出现异常了才执行。..., view_kwargs) 视图函数之前,process_request 方法之后执行 process_exception(self, request, exception) 视图函数中出现异常了才执行...process_response(self, request, response) 视图函数之后执行 下面一图就能比较好的呈现 django 整个处理流程逻辑 更多的中间件细节可以去 Django...代码块 例如在对数据库进行操作时,为了防止数据库发生了意外的异常导致系统崩溃,通常加上 try ... except ...来记录异常信息。然而配置了全局异常处理,则可以不用管理。
在2处,我们调用了函数logout(), 它要求将request对象作为实参。然后,我们重定向到主页(见3)。 3. 链接到注销视图 现在我们需要添加一个注销链接。...我们将使用Django提供的表单UserCreationForm, 但编写自己的视图函数和模板 1....视图函数register() 在注册页面首次被请求时,视图函数register()需要显示一个空的注册表单,并在用户提交 填写好的注册表单时对其进行处理。...在函数register() 中,我们检查要响应的是否是POST请求。如果不是,就创建一个UserCreationForm实例,且不给 它提供任何初始数据(见1)。...用户注册时,被要求输入密码两次;由于 表单是有效的,我们知道输入的这两个密码是相同的,因此可以使用其中任何一个。在这里,我 们从表单的POST数据中获取与键'password1'相关联的值。
Django默认开启了CSRF防护,会对上述请求方式进行CSRF防护验证,在测试时可以关闭CSRF防护机制,方法为在settings.py文件中注释掉CSRF中间件,如:4.1 表单类型 Form Data...无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。...无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。...但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳。...中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
在处理非 HTTP 形式的报文时非常有用,例如:二进制图片、XML,Json等。 但是,如果要处理表单数据的时候,推荐还是使用 request.POST 。...只有当Django 启用会话的支持时才可用。 完整的细节参见会话的文档。...类实现了django.contrib.auth.models.User 接口,但具有下面几个不同点: id 永远为None。...大部分现代的 JavaScript 库都会发送这个头部。如果你编写自己的 XMLHttpRequest 调用(在浏览器端),你必须手工设置这个值来让 is_ajax() 可以工作。 ...301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址; 302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址
此外,在 博客从“裸奔”到“有皮肤”[3] 中提过,所有模型的字段都接受一个 verbose_name 参数(大部分是第一个位置参数),django 在根据模型的定义自动生成表单时,会使用这个参数的值作为表单字段的...我们知道每一个 URL 对应着一个 django 的视图函数,于是 django 调用这个视图函数,我们在视图函数中写上处理用户通过表单提交上来的数据的代码,比如验证数据的合法性并且保存数据到数据库中,...', context=context) 这个评论视图相比之前的一些视图复杂了很多,主要是处理评论的过程更加复杂。...具体过程在代码中已有详细注释,这里仅就视图中出现了一些新的知识点进行讲解。...因为视图函数 comment 中的表单实例是绑定了用户提交的评论数据,以及对数据进行过合法性校验的表单,因此当 django 渲染这个表单时,会连带渲染用户已经填写的表单数据以及数据不合法的错误提示信息
我们经常使用 uwsgi/gunicorn 部署 Django/Flask 应用,但是大家思考过一个问题没有,为什么不同的框架可以部署在相同的 web 服务器上呢?...比如为什么 Flask/Django 都可以运行在 gunicorn 之上呢? 肯定需要定义一个规范,如果遵守这个规范,就可以让任意的 web 框架运行在相同的 web server 上了。...为了解决这个问题,WSGI 才诞生了。 WSGI 描述了 Web Server(Gunicorn/uWSGI)如何与 web 框架(Flask/Django)交互,Web 框架如何处理请求。...如果叫这个你不觉的奇怪吗?这不是层叠样式表吗。 1.恶意用户将代码植入到提供给其他用户使用的页面中,未经转义的恶意代码输出到其他用户的浏览器被执行。...2.用户浏览页面的时候嵌入页面中的脚本(js)会被执行,攻击用户。
领取专属 10元无门槛券
手把手带您无忧上云