django FormView

Django官方文档中有比较详细的ListViewDetailView的详细例子和说明, 本文这里就不在重复了, 本文的目的主要集中在官方文档中没有仔细说明的FormMixin上,下面来看例子, 我们就用官网上提供的models:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

    class Meta:
        ordering = ["-name"]

    def __unicode__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField('Author')
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

这个model中提供了2个类, 一个是Publisher, 一个是Book. 下面来看如何用FormMixin更新Book:

首先, 我们需要创建一个form, 代码如下:

from django import forms
from models import Book

class BookForm(forms.ModelForm):
    class Meta:
        model = Book

那么在我们的视图类就可以简单地这样来操作:

from django.views.generic.edit import CreateView
from models import Book
from forms import BookForm

class AddBook(CreateView):
    form_class = BookForm
    model = Book
    template_name = 'addbook.html'  #这里是你的模板文件名

接着我们创建这个模板文件, 比如:

<form action="/contact/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

最后一步就是在urls文件中指向我们创建的AddBook类了, 例如:

url(r'^createbook/$', AddBook.as_view(), name = 'createbook'),

完成以上的步骤就可以创建Book了! 简单吧? 好像还有点问题, 怎么非登陆用户也能创建Book? 这个问题我们可以参照Django官方文档中的例子, 我们可以给AddBook类添加一个方法,如下:

from django.views.generic.edit import CreateView
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from models import Book
from forms import BookForm

class AddBook(CreateView):
    form_class = BookForm
    model = Book
    template_name = 'addbook.html'  #这里是你的模板文件名

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(ProtectedView, self).dispatch(*args, **kwargs)

这样, 当用户想要创建Book而又没有登陆的话, 浏览器会跳转到登陆界面.
写了这么点就感觉有点乱了, 整理一下, 明天继续写FormMixin应用的深入应用.


转载于:https://my.oschina.net/shniu/blog/201799

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值