这些通用的视图将自动创建一个ModelForm,只要它们能知道使用哪一个模型类: 如果给出model属性,则使用该模型类。 如果get_object() 返回一个对象,则使用该对象的类。...如果给出queryset,则使用该查询集的模型。 模型表单提供一个form_valid() 的实现,它自动保存模型。如果你有特殊的需求,可以覆盖它;参见下面的例子。...你甚至不需要为CreateView 和UpdateView提供success_url —— 如果存在它们将使用模型对象的get_absolute_url()。...注意这里我们是如何配置通用的基于类的视图的;我们自己没有写任何逻辑: #views.py from django.views.generic.edit import CreateView, UpdateView...如果你希望分开CreateView 和UpdateView 的模板,你可以设置你的视图类的template_name 或template_name_suffix。
,并重定向到get_success_url(),可以覆盖该方法在以上行为之间添加额外的动作.该方法必须返回一个HttpResponse. form_invalid(form):如果表单验证失败,则使用已填充的表单数据和错误信息重新渲染上下文...get_context_data(**kwargs):返回显示对象的上下文数据. 4.CreateView ? 显示用于创建对象的表单的视图,通过验证错误信息重新显示视图,并且保存对象....django.views.generic.edit import CreateView, UpdateView, DeleteView from django.core.urlresolvers import...,则仍留在原来页面 return render(request, 'employee_list.html', context) class EmployeeUpdate(UpdateView...可以直接用Django通用视图里的UpdateView和CreateView。
对于这些场景,Django提供了几个class-based view来处理: ListView UpdateView CreateView DeleteView 这几个类视图分别对应着查询ListView...、更新UpdateView、创建CreateView、删除DeleteView这几个操作。...如果你在Django设置settings.py中的TEMPLATES下配置了'APP_DIRS': True 的话,Django默认会去渲染/project/app_name/templates/app_name...而在post请求发送过来的时候,Django会根据model里的field属性去做合法性校验(类型是否正确、字段是否必填等),在校验成功以后重定向至success_url。...---- 剩下的UpdateView以及DeleteView与CreateView的实现也是相类似的原理。
订阅form CreateView 创建对象 创建新文章页 UpdateView 更新对象 修改文章页 DeleteView 删除对象 删除文章页 Generic date views 显示一段时间内的对象...,并重定向到get_success_url(),可以覆盖该方法在以上行为之间添加额外的动作.该方法必须返回一个HttpResponse. form_invalid(form):如果表单验证失败,则使用已填充的表单数据和错误信息重新渲染上下文...import DetailView from django.views.generic.edit import CreateView, UpdateView, DeleteView from django.core.urlresolvers...,则仍留在原来页面 return render(request, 'employee_list.html', context) class EmployeeUpdate(UpdateView...可以直接用Django通用视图里的UpdateView和CreateView。
from django.views.generic.edit import CreateView, UpdateView from django.contrib.auth.decorators import...如果请求方法是POST,视图函数将获取用户提交的文章标题和内容,并创建一个新的Post对象,然后将用户重定向到新创建的文章的详细页面。...视图函数获取文章的slug,并使用get_object_or_404函数从数据库中获取文章对象。然后,视图函数将文章对象传递给包含文章详细信息的HTML模板。...如果请求方法是POST,视图函数将获取用户提交的文章标题和内容,并更新现有的Post对象,然后将用户重定向到更新后的文章的详细页面。...这个视图函数使用Django的通用视图类CreateView来处理创建新文章的表单,然后重定向到post_list视图函数,这个视图函数将渲染一个包含所有文章的列表的HTML模板。
基础视图 View TemplateView RedirectView 通用的显示视图 DetailView ListView 通用的编辑视图 FormView CreateView UpdateView...这表示不应该使用列表、字典或其它可变对象作为视图的参数。如果你真这么做而且对共享的对象做过修改,某个用户的行为可能对后面访问同一个视图的用户产生影响。...参数必须对应于在类中已经存在的属性(hasattr 检查可以返回True)。 基础视图 VS. 通用视图 基于类的基础视图可以认为是父视图,它们可以直接使用或者继承它们。...Django 的通用视图建立在基础视图之上,用于作为经常用到的功能的快捷方式,例如显示对象的详细信息。它们提炼视图开发中常见的风格和模式并将它们抽象,这样你可以快速编写常见的视图而不用重复你自己。...大部分通常视图需要queryset 键 ,它是一个查询集 实例;关于查询集对象的更多信息,请参见执行查询。 译者:Django 文档协作翻译小组,原文:API reference。
Django小技巧15: 使用基于类视图的Mixins Posted November 05, 2018 ?...Mixins 在基本视图的左侧 Mixins 应该继承Python的内置对象类型(object)....return super(FormMessageMixin, self).form_invalid(form) class DocumentCreateView(FormMessageMixin, CreateView...Django 1.9开始, 内置的LoginRequiredMixin和UserPassesTestMixin....如果你要在视图中使用它们, 它们始终位于最左侧: Python Mixins在左,View在后 class DocumentUpdateView(LoginRequiredMixin, FormMessageMixin
"/login/" TemplateView 显示Django HTML template 一般网站中使用模板显示的页 ListView 显示对象列表 文章列表页 DetailView 显示对象详情 文章详细页...FormView 提交From 网站联系我们或emai订阅form CreateView 创建对象 创建新文章页 UpdateView 更新对象 修改文章页 DeleteView 删除对象 删除文章页...View中基本元素 1 class ModelCreatView(CreateView): 2 def __init__(self, model, template_name, context_object_name...包含两个关键方法: def get_context_data(self, **kwargs): def get_queryset(self): 第一个方法返回一个字典给前端,包括分页信息,列表信息,已经其他自定义的信息...Mixin实现 view中如果觉得自带的post、get方法不够好,也可以重写post、get方法,这样就与函数式编程没有什么区别。
由django-admin startproject创建的默认settings.py已经包含了启用消息功能所需的所有设置: django.contrib.messages在INSTALLED_APPS中...如果cookie数据大小超过2048字节,则删除旧消息。...import SuccessMessageMixin from django.views.generic.edit import CreateView from myapp.models import...get_success_message(self, cleaned_data)方法 对于ModelForms,如果需要从保存的对象访问字段,请覆盖get_success_message()方法。...CreateView from myapp.models import ComplicatedModel class ComplicatedCreate(SuccessMessageMixin, CreateView
所以,基本表单的功能看BaseForm已经足够了。 2、从模型创建表单 django对于MVC中的C与M间的映射是非常体贴的,集中体现中Model模型中(比如模型的权限与用户认证)。...,多了instance参数,它等价于Model模型的一个实例 if instance is None: #不传instance参数,则会新构造model对象...3、通用视图 django.views.generic.ListView和django.views.generic.edit下的CreateView, UpdateView, DeleteView都是通用视图...我们看看CreateView的继承关系: 简单介绍下CreateView通用视图中每个父类的作用。...我们已经有了通用视图+ModelForm这样的利器,难道还需要手动去写Form表单?
如果方法为 GET 则执行 get() 方法, 如果为 POST 则执行 post() ; views.py Python from django.views import View class ContactView...基于类的通用视图(GV) Django 引入了基于类的通用视图, 来处理 web 常见的用例需求, 比如创建新对象,表单处理,列表视图,分页,归档视图等....UpdateView DeleteView 基于日期的视图 ArchiveIndexView YearArchiveView MonthArchiveView WeekArchiveView DayArchiveView...结论 我觉得如果是初学者在做线上项目,在不了解面向对象时适用函数式编程是个好的选择,无论是对于以后维护还是开发阶段,都能 hold 住。...Django 官方的建议是: 如果你难以将自己的视图实现为通用视图(重点是generic views)的子类, 那么你直接使用基于 View 的视图或功能视图, 只编写你所需的代码更更加有效.
GET 用于从服务器请求数据,每当点击了一个链接或者直接在浏览器中输入一个网址时,就创建了一个 GET 请求。 POST 用于想更改服务器上的数据,每次发送数据给服务器都会导致资源状态变化。...Django 使用 CSRF Token 保护所有的 POST 请求,这是避免外部站点或者应用程序向服务器的应用程序提交数据的安全措施。...应用程序每次接收一个 POST 时,都先检查 CSRF Token,如果这个 request 没有 token,或者这个 token 是无效的,它就会抛弃提交的数据。...基于类的通用视图 from django.views.generic import UpdateView, ListView ① 主页 class BoardListView(ListView):...内置的视图装饰器,如果用户没有登录,将被重定向到登录页面。
为了方便 模拟视图更新,这里创建了一个函数 updateView ,当数据更新时,调用 updateView ,模拟进行了视图更新(在 Vue 中表现为 template 模板中引用了该变量值的 DOM...,即在执行 Object.defineProperty 前先进行递归调用 observe,如果该属性为对象,则 observe 会**递归调用,defineReactive**,不是则observe 直接返回...,则进行进一步监听,若非value非对象则直接返回 observe(value) Object.defineProperty(target, key, { get(){ return...Array.prototype[method].call(this, ...arguments) }})2、将需要监听的数组的原型指向自定义的特殊原型对原来的 observe 进行修改,加入数组判断,如果是数组则修改该数组的原型...== 'object' || target === null) { // 不是数组或对象 return target } // 如果是数组则修改该数组的原型 if(Array.isArray
一旦创建了重定向,RedirectFallbackMiddleware类将完成所有工作。每当Django应用引发一个404错误,作为终极手段,该中间件将为所请求的URL在重定向数据库中进行查找。...如果找到匹配项,并且new_path非空,它将重定向到new_path; 如果找到匹配项,单new_path为空,它将发送一个410HTTP头信息以及一个空向应。...建议将简单页面放在重定向之前。 增加、变更删除重定向 通过管理界面: 如果已经激活了全自动Django超级管理界面,你应该能够在超级管理首页看到重定向区域。...可以像编辑系统中其他对象一样编辑重定向。 重定向表现为django/contrib/redirects/models.py中的一个标准Django模型。...所以可以通过Django数据库API来存取重定向对象。
为了方便 模拟视图更新,这里创建了一个函数 updateView ,当数据更新时,调用 updateView ,模拟进行了视图更新(在 Vue 中表现为 template 模板中引用了该变量值的 DOM...,即在执行 Object.defineProperty 前先进行递归调用 observe,如果该属性为对象,则 observe 会**递归调用defineReactive**,不是则observe 直接返回...,则进行进一步监听,若非value非对象则直接返回 observe(value) Object.defineProperty(target, key, { get(){ return...Array.prototype[method].call(this, ...arguments) }})2、将需要监听的数组的原型指向自定义的特殊原型对原来的 observe 进行修改,加入数组判断,如果是数组则修改该数组的原型...== 'object' || target === null) { // 不是数组或对象 return target } // 如果是数组则修改该数组的原型 if(Array.isArray
为了方便 模拟视图更新,这里创建了一个函数 updateView ,当数据更新时,调用 updateView ,模拟进行了视图更新(在 Vue 中表现为 template 模板中引用了该变量值的 DOM...,即在执行 Object.defineProperty 前先进行递归调用 observe,如果该属性为对象,则 observe 会**递归调用, defineReactive**,不是则observe...,则进行进一步监听,若非value非对象则直接返回 observe(value) Object.defineProperty(target, key, { get(){ return...Array.prototype[method].call(this, ...arguments) } }) 2、将需要监听的数组的原型指向自定义的特殊原型 对原来的 observe 进行修改,加入数组判断,如果是数组则修改该数组的原型...== 'object' || target === null) { // 不是数组或对象 return target } // 如果是数组则修改该数组的原型 if(Array.isArray
如果对通信机制不了的的读者可以先去阅读通信机制。...如果你了解React.js 的渲染过程,那么去理解ReactNative就很容易。蓝色是React具备的能力,黄色是ReactNative特有的能力。...该对象主要包括以run为 key 存储的箭头函数,run中调用了renderApplication方法。...)、更新组件属性(updateView)等,具体内容后文会详细介绍。...前文已提到,RCTUIManager#createView:viewName:rootTag:props:只是创建了目标 view 并添加到_viewRegistry中(仅此而以)。
验证通过,则创建该用户给登陆成功的 session 数据;反之,返回 前端 302, 重定向至 CAS 登陆页面。 APP 服务验证 ST 通过之后,返回 前端 登陆页面的 页面内容。...image-20200909202310620 提示已经登陆成功,要注意,这里没有其他配置,所以不会跳至其他的页面。只是在上面提示已经登陆成功!...,则自动重定向至 后台配置的 CAS 服务 http://127.0.0.1:3000/cas/login ,然后在 cas 服务器上登陆成功之后,重新重定向回客户端服务。...访问客户端服务:http://127.0.0.1:8000/cas/logout,则自动重定向至 后台配置的 CAS 服务 http://127.0.0.1:3000/cas/logout,则注销退出用户...image-20200914165737365 4.在项目的登陆视图,增加用户的登陆状态判断,如果已登陆,则直接重定向至首页 ?
然后从当前请求对象中提取出 MediaType。 如果 MediaType 不为 null,则根据 MediaType,找到合适的视图解析器,并将解析出来的 View 返回。...如果开发者为 ContentNegotiatingViewResolver 配置了相关的视图解析器,则去检查这些视图解析器是否存在于 matchingBeans 中,如果不存在,则进行初始化操作。...view : null); } } 首先如果没有开启缓存,则直接调用 createView 方法创建视图返回。 调用 getCacheKey 方法获取缓存的 key。...接下来判断逻辑视图名前缀是不是 redirect:,如果是,则表示这是一个重定向视图,则构造 RedirectView 进行处理。...如果前面都不是,则调用父类的 createView 方法去构建视图,这最终会调用到子类的 loadView 方法。
单点登录实现原理 当用户(浏览器)访问我们的服务(第三方应用)时, 服务首先判断用户是否已经登录(其实就是判断请求中是否有sessionid),如果没有登录,则重定向至认证服务器,重定向过程中将原始URL...认证服务器接受用户验证信息,如通过,则重定向至原始URL,并携带随机生成的code信息。 服务获取code与原始URL请求后,再使用key和secret从认证服务器获取token。...Django实现过程 为了在Django中接入Oauth,先得去掉Django提供的session服务和认证服务。然后自定义一个中间件。...utils.oauth import Oauth class OauthMiddleware(MiddlewareMixin): """ 第一步:用户第一次访问后台时,不带cookie,所以重定向至认证服务器进行认证...第二步:认证服务器重定向至原始访问页面,不带cookie,但带有code 第三步:后台使用code从认证服务器获取token,获取token之后再获取用户信息,在响应中设置cookie
领取专属 10元无门槛券
手把手带您无忧上云