django cbv

时间:2023-01-18 19:32:32

django 提供了一系列现成的类视图,他们都继承自一个 View 基类(django.views.generic.base.View)。在这个基类里实现了与 URLs 的接口(as_view)、请求方法匹配(dispatch)和一些其他的基本功能。比如 RedirectView 实现了一个简单的 HTTP 重定向,TemplateView 给 View 添加了一个渲染模板的功能。

简单用法:

from django.conf.urls import patterns
from django.views.generic import TemplateView urlpatterns = patterns('',
(r'^about/', TemplateView.as_view(template_name="about.html")),
)

子类化通用视图,

一个 AboutView,他覆盖了 TemplateView 的模板属性和获取 Context 方法(这是使用 TemplateView 的一般做法):

from django.views.generic import TemplateView

class AboutView(TemplateView):
template_name = "about.html" def get_context_data(self, **kwargs):
context = super(AboutView, self).get_context_data(**kwargs)
#alter context
return context

ListView:

from django.views.generic import ListView
from books.models import Publisher class PublisherList(ListView):
model = Publisher

它会自动去寻找publiser_list.html页面作为模板,并在里面渲染{{publisher_list}}作为变量.

对数据模型进行筛选:

from django.views.generic import ListView
from books.models import Book class BookList(ListView):
queryset = Book.objects.order_by('-publication_date')
context_object_name = 'book_list'

如果要进行传参的话:

# urls.py
from django.conf.urls import patterns
from books.views import PublisherBookList urlpatterns = patterns('',
(r'^books/([\w-]+)/$', PublisherBookList.as_view()),
) # views.py
from django.shortcuts import get_object_or_404
from django.views.generic import ListView
from books.models import Book, Publisher class PublisherBookList(ListView): template_name = 'books/books_by_publisher.html' def get_queryset(self):
self.publisher = get_object_or_404(Publisher, name=self.args[0])
return Book.objects.filter(publisher=self.publisher)

保存时候的小动作:

# models.py
from django.db import models class Author(models.Model):
salutation = models.CharField(max_length=10)
name = models.CharField(max_length=200)
email = models.EmailField()
headshot = models.ImageField(upload_to='author_headshots')
last_accessed = models.DateTimeField() #URLConf from django.conf.urls import patterns, url
from books.views import AuthorDetailView urlpatterns = patterns('',
#...
url(r'^authors/(?P<pk>\d+)/$', AuthorDetailView.as_view(), name='author-detail'),
) #View from django.views.generic import DetailView
from django.utils import timezone
from books.models import Author class AuthorDetailView(DetailView): queryset = Author.objects.all() def get_object(self):
# Call the superclass
object = super(AuthorDetailView, self).get_object()
# Record the last accessed date
object.last_accessed = timezone.now()
object.save()
# Return the object
return object #Model
def get_absolute_url(self):
return reverse('student:systemMessageDetail', args=[self.pk])

包含post,get方法:

from django.http import HttpResponse
from django.views.generic import View class MyView(View):
def get(self, request):
# <view logic>
return HttpResponse('result')

一个简单的contact form

# forms.py
from django import forms class ContactForm(forms.Form):
name = forms.CharField()
message = forms.CharField(widget=forms.Textarea) def send_email(self):
# 使用 self.cleaned_data 字典来发送一封邮件
pass # views.py
from myapp.forms import ContactForm
from django.views.generic.edit import FormView class ContactView(FormView):
template_name = 'contact.html'
form_class = ContactForm
success_url = '/thanks/' def form_valid(self, form):
# 当有效的数据被 POST 进来以后,本方法就会被调用
# 本方法应当返回一个 HttpResponse.
form.send_email()
return super(ContactView, self).form_valid(form)

转载自http://www.pythontip.com/blog/post/12172/

一个简单的view

django cbv

django cbv

django cbv

django cbv

django cbv

django cbv的更多相关文章

  1. Python&sol;Django&lpar;CBV&sol;FBV&sol;ORM操作&rpar;

    Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...

  2. 源码解析Django CBV的本质

    Django CBV模式的源码解析 通常来说,http请求的本质就是基于Socket Django的视图函数,可以基于FBV模式,也可以基于CBV模式. 基于FBV的模式就是在Django的路由映射表 ...

  3. Django CBV和FBV

    Django CBV和FBV Django内部CBV内部接收方法操作: 1.通过客户端返回的请求头RequestMethod与RequesrtURL,会以字符串形式发送到服务器端. 2.取到值后通过d ...

  4. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  5. django CBV视图源码分析

    典型FBV视图例子 url路由系统 from django.conf.urls import url from django.contrib import admin from luffycity.v ...

  6. Python Django CBV下的通用视图函数

    ListView TemplateView DetailView 之前的代码实例基本上都是基于FBV的模式来撰写的,好处么,当然就是简单粗暴..正如: def index(request): retu ...

  7. &dollar;Django cbv源码分析 djangorestframework框架之APIView源码分析

    1 CBV的源码分析 #视图 class login (View): pass #路由 url(r'^books/$', views.login.as_view()) #阅读源码: #左侧工程栏--- ...

  8. &lbrack;django&rsqb;cbv方式

    cbv的方式 1.简单的url from django.views.generic import TemplateView path('', TemplateView.as_view(template ...

  9. django ----CBV中加装饰器

    CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...

  10. django CBV和FBV写法总结

    一.FBV function base views 平常我们的写法,一个URL对应一个视图函数 二.CBV 1.url 配置 path('test/',views.CBVTest.as_views() ...

随机推荐

  1. bzoj2748&lbrack;HAOI2012&rsqb;音量调节(背包问题的方案)

    Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...

  2. 安卓问题集-Installation error&colon; INSTALL&lowbar;PARSE&lowbar;FAILED&lowbar;MANIFEST&lowbar;MALFORMED

    错误出现原因: 1.没有 AndroidManifest.xml file文件(出现几率较小) 2. 是你在外面修改了包名而在 AndroidManifest.xml file.文件中没有同步过去导致 ...

  3. CSS重点巩固

    一:position定位 a: static 定位 ,HTML元素的默认值,即没有定位,元素出现在正常的流中.静态定位的元素不会受到top, bottom, left, right影响. b: fix ...

  4. 【动态规划】The Triangle

    问题 E: [动态规划]The Triangle 时间限制: 1 Sec  内存限制: 128 MB提交: 24  解决: 24[提交][状态][讨论版] 题目描述 73 88 1 02 7 4 44 ...

  5. wc命令--Linux统计文件行数

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

  6. 递归 与 js 对象的引用

    <script> //递归 function test(n) { if (n == 1) { return 1 } console.log(n) return n * test(n - 1 ...

  7. RoHS认证简介

    RoHS认证是<电气.电子设备中限制使用某些有害物质指令>(The restriction of the use of certain hazardous substances in el ...

  8. pip3 install requests Cannot open D&colon;&bsol;Python35&bsol;Scripts&bsol;pip3-script&period;py

    1.问题描述: 使用pip(或pip3)指令安装模块时,出现了Cannot open D:\Python35\Scripts\pip3-script.py的报错信息 2.原因分析: pip安装出错 3 ...

  9. 20190104xlVBA&lowbar;在课表里标记自己的课程

    Sub TagMyCourses() Const HEAD_ROW = 3 With ActiveSheet endrow = .Cells.Find("*", .Cells(1, ...

  10. 11g等待事件之library cache&colon; mutex X

    11g等待事件之library cache: mutex X 作者: dbafree 日期: 2012 年 07 月 01 日发表评论 (0)查看评论   library cache: mutex X ...