精华内容
下载资源
问答
  • django FormView

    2014-02-21 14:28:00
    这个问题我们可以参照Django官方文档中的例子, 我们可以给AddBook类添加一个方法,如下: from django.views.generic.edit import CreateView from django.contrib.auth.decorators import login_required ...

    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

    展开全文
  • Django FormView视图

    2021-02-22 12:07:48
    Django FormView视图 这次我们要在APP里面创建一个form.py # 刘文豪 # 大帅哥 from django import forms from .models import PersonInfo class PersonInfoForm(forms.ModelForm): class Meta: model = ...

    Django FormView视图

    这次我们要在APP里面创建一个form.py

    # 刘文豪
    # 大帅哥
    from django import forms
    from .models import PersonInfo
    
    
    class PersonInfoForm(forms.ModelForm):
    
        class Meta:
            model = PersonInfo
            fields = '__all__'
    
    
    

    views.py

    def result(request):
        return HttpResponse('成功登入')
    
    class index6(FormView):
        initial = {'name': 'nanxiang', 'age': '18'}  # 表单初始化
        template_name = 'index7.html'  # 响应模板名称
        success_url = '/a'  # 登入成功后的路由
        form_class = PersonInfoForm  # 实例化模板
        extra_context = {'title': '人员信息表'}  # 响应信息
    

    路由设置urls.py

    path('', views.index6.as_view(), name='index6'),
        path('a', views.result, name='result')
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • djangoFormView实例一则

    千次阅读 2015-09-22 16:28:12
    class FormTestView(FormView): template_name = 'index.html' form_class = AddForm def get(self, request, *args, **kwargs): print 'get url parms: ' + kwargs['parm'] form = self.

    views.py:

    class FormTestView(FormView):
      template_name = 'index.html'
      form_class = AddForm
    
      def get(self, request, *args, **kwargs):
        print 'get url parms: ' + kwargs['parm']
        form = self.form_class
        return self.render_to_response({'form':form})
    
      def form_valid(self, form):
        print 'post url parms: ' + self.kwargs['parm']
        a = form.cleaned_data['a']
        b = form.cleaned_data['b']
    
        return HttpResponse(str(int(a) + int(b)))


    forms.py:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    # vim:set shiftwidth=2 tabstop=2 expandtab textwidth=79:
    
    from django import forms
    
    class AddForm(forms.Form):
      a = forms.IntegerField()
      b = forms.IntegerField()


    urlConf:

    url('^form/(?P<parm>\w+)/$', FormTestView.as_view(), name='form'),


    templates/index.html:

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    
    <form method='post'>
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="提交">
    </form>
    
    </body>
    </html>



    测试结果:

    get url parms: 123
    [22/Sep/2015 16:26:37] "GET /form/123/ HTTP/1.1" 200 473
    post url parms: 123
    [22/Sep/2015 16:26:43] "POST /form/123/ HTTP/1.1" 200 3

    展开全文
  • 一,在formview里定义两个类变量(因为url里对应的是两个变量)。 class AppResEditView(FormView): template_name = ' app/app_res_edit.html ' context_object_name = ' app_res ' form_class = ...

    这个技巧,主要是用于表单初始化及回显。

    也就是说,如果用户的数据库里有数据,则要将相应的数据显示在表单里,

    如果用户的数据库里没有数据,才会生成一个空白的表单给用户,

    这样才显得专业塞!

    而我面对的尴尬问题是:

    表单数据不是对应的数据库里的一条记录,而是符合条件的多条记录。

    而且,数据库的过滤条件,是通过url里定义的值,而不是固定的参数过滤。

    那么,肿么办?

    查文档呗~~~~!

    当看完相关文档,知道是先调用get方法,再调用get_initial方法来初始化表单时,

    处理问题的方案,就浮现出来了。

    通过类变量作传递嘛~~~

    具体操作如下:

    一,在formview里定义两个类变量(因为url里对应的是两个变量)。

    class AppResEditView(FormView):
        template_name = 'app/app_res_edit.html'
        context_object_name = 'app_res'
        form_class = AppResForm
        app = None
        env = None

     

    二,在get里填充这两个变量。

        def get(self, request, *args, **kwargs):
            # 先在get方法里拿到app和env,放到类变量里,
            # 然后,在将变量传递到get_initial方法里,初始化表单数据。
            # 这样实现是因为方法调用上有先后关系,且数据库里不是对应一条记录。
            self.app = App.objects.get(name=kwargs['app'])
            self.env = Env.objects.get(name=kwargs['env'])
            return super().get(self, request, *args, **kwargs)

     

    三,在get_initial方法里,拿出这两个变量,用来进行数据库过滤。

        def get_initial(self, *args, **kwargs):
            """
            Returns the initial data to use for forms on this view.
            """
            # 初始化表单数据
            initial = super().get_initial()
            res_list = AppEnvConfig.objects.filter(app=self.app, env=self.env)
            for item in res_list:
                initial[item.key] = item.value
            return initial

     

    转载于:https://www.cnblogs.com/aguncn/p/10340587.html

    展开全文
  • Django FormView, TemplateView简单示例

    千次阅读 2013-10-07 15:05:04
    from django.views.generic.edit import FormView from .forms import ContactForm class ThanksView(TemplateView): template_name = 'myapp/thanks.html' class ContactView(FormView): template_name = '...
  • 真的不知道是怎么回事, 以前都是手动的, form使用modelform。 view使用createview。 今天写新系统时,为了更灵活。...但form本身的后端验证功能都能生效) ...view使用formview。 在写完for...
  • django form表单上传文件

    千次阅读 2018-05-14 19:54:16
    django import forms class FilesForm(forms.Form): img = forms.FileField( required = False ) img_detail = forms.FileField( required = False ) 3,view视图  // project model //type = models....
  • 登录注册是一个网站再平常不过的功能,因此Django内置了许多类和方法来帮助我们使开发更便捷,相比较于使用函数的方式来处理登录注册的后端代码,使用类的方式更为便捷方便,如下: urls.py: path('login/', views....
  • auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询... ... 事实上,Django已经提供了内置的用户认证功能。 在使用"python manage.py makemigrationss"和"python manage.py migrate"迁移完成...
  • 因为上传的文件通常大小比较大,所以Django默认会把上传的文件放在一个具体的文件夹中 打印 request.FILES 的信息 def index(request): if request.method=="POST": print(request.POST.get("up_file")) ...
  • 从内部来看,每个session都只是一个普通的Django model(在 django.contrib.sessions.models 中定义)。每个session都由一个随机的32字节哈希串来标识,并存储于cookie中。 因为它是一个标准的模型,所以你可以使用...
  • 最近在学习Django,官方文档介绍地十分详细。但是“大而全”就难免会有些不够速成,和我们这个浮躁的互联网时代格格不入,所以我就整理了这个文档。就像coolshell说的,一泡屎的时间就可以看完。 框架的好处就是,...
  • Django的View是如何工作的Django的Web开发也遵循经典软件设计开发的MVC模式。View (视图) 主要根据用户的请求返回数据,用来展示用户可以看到的内容(比如网页,图片),也可以用来处理用户提交的数据,比如保存到...
  • Django】基于类的视图Class Based View

    千次阅读 2020-01-25 16:16:03
    Django中基于类的视图Class Based View的用法及源码分析。
  • django haystack深入研究

    2020-11-23 10:56:56
    django haystack深入研究 前言 evalshell.com风炫安全 是我自己开发的一个搜集全网安全领域知识库的一个垂直领域的网站,对于一个垂直搜索网站,我深知搜索准确度和速度的重要,所以经过一番调研之后我选择了...
  • 我这里使用了多数据库,django多数据库的配置参考: http://lihuipeng.blog.51cto.com/3064864/1415141 models.py(这个salt官方需要的两个表) 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
  • Django Multi。 表格检视 基于Django类的视图,用于在单个视图中使用多个Form或ModelForm。...django.views.generic导入FormView 属性和方法 form_classes包含视图表单的字典。 are_forms_valid()检查form_classes中
  • django LoginView 源码浅析

    千次阅读 2017-09-14 09:18:26
    django开发web效率很高,除了以自带admin界面之外,django内置了丰富的组件值得学习和研究,最近刚好在做django项目,顺带也研究了一下代码。login是网站最基本的功能,使用django时,可以用自带的User ...
  • 为此,Django为匿名用户和经过身份验证的用户提供了基于cookie和session的消息传递的全面支持。 消息框架可以将消息临时存储在一个请求中,并检索它们以在后续请求(通常是下一个请求)中显示。 每条消息都标记有...
  • UserForm = modelform_factory(User, fields=("name",))

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 218
精华内容 87
关键字:

djangoformview