Django 表单视图

Django 表单视图,Django的表单视图可以处理一些基本的表单任务,如表单验证、编辑等。以前面的FileFieldView视图为例,如果当用户没有选择任何文件时就单击提交按钮进行提交,表单会阻止HTTP请求并弹出提示信息,如图所示。
Django 表单视图

另外当用户提交了合法信息后,还可以使用form_valid()方法执行额外操作,下面修改FileFieldView视图,添加form_valid()方法:

class FileFieldView(FormView):
    ...
    def form_valid(self, form)
        print('data: ', form.data)
        return super().form_valid(form)

    def post(self, request, *args, **kwargs):
        ...
        if form.is_valid():
            for f in files:
                print(type(f)) # 打印文件信息
                handle_uploaded_file(f)
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

重启Web服务并上传文件,此时服务器输出以下信息:

>>> [27/Dec/2017 11:16:51] "GET /blog/multyupload/ HTTP/1.1" 200 411
>>> <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
>>> <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
>>> data:  <QueryDict: {'csrfmiddlewaretoken': ['pEOHKlJwL9gqyONZt8z4CrJk9PjVVV
>>> [27/Dec/2017 11:17:03] "POST /blog/multyupload/ HTTP/1.1" 302 0

编辑表单视图

通过使用表单视图,可以在编写很少的代码的情况下完成模型的增删改操作。下面以Author模型为例看看如何使用表单视图编辑模型。

修改Author模型类:

from django.db import models
from django.shortcuts import reverse

class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField()

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('blog:author-detail', kwargs={'pk', self.pk})

添加视图:
Django 表单视图

添加模板:
author_form.html:

<form action="{% url 'blog:author-add' %}" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" />
</form>

author_detail.html:
Django 表单视图

author_update.html:

<form action="{% url 'blog:author-update' object.id %}" method="post">{% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Update" />
</form>

author_confirm_delete.html:

<form action="{% url 'blog:author-delete' object.id %}" method="post">{% csrf_token %}
        <p>确定要删除"{{ object.name }}"吗?</p>
        <input type="submit" value="Confirm" />
</form>

添加URL:
Django 表单视图
需要注意的是,UpdateView和DeleteView对于POST和GET请求都有不同的处理方式,GET请求只会用于显示确认信息,而POST请求才会真正执行操作,例如更新Author时首先弹出确认框,只有单击Update按钮之后才会真正更新信息,如图所示。
Django 表单视图

Delete操作同样需要先进行确认才可以真正执行,如图所示。
Django 表单视图

当前用户

一般进行数据操作时都需要记录执行人,也就是当前登录的用户,Django使用User模块进行用户管理,下面修改Author模型使其能够记录添加Author操作的用户信息。
Django 表单视图

修改AuthorCreate视图:
Django 表单视图
执行migrations命令。

重新启动Web服务并登录到Admin(目前网站只有Admin后台登录功能),添加Author。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!