Django中使用表单

使用表单

表单用 user 提交数据,是网站中比较重要的一个内容

GET 和 POST 方法

GET 和 POST 的区别

URL,全称是"统一资源定位符"。用于对应互联网上的每一个文件。而 GET、POST 等方法,本质上就是对这个 URL 进行一系列的操作。GET、POST、PUT、DELETE 分别对应对资源进行查、改、增、删。因此,任何对系统状态有改变的请求(例如,对数据库的数据进行修改)都应该使用 POST 。GET 方法用于不影响系统状态的请求,如搜索或者是请求发送一些数据。

在 Django 中,使用 GET 和 POST 方法来处理表单

  • Django 中的登陆表单就是使用 POST 方法的,浏览器会将表单数据打包,发送给服务器,并返回一个 response
  • 而 GET 方法则是将要提交的数据做为键值对提交的网址结合起来生成一个 URL,例如:
https://docs.djangoproject.com/search/?q=forms&release=1.

Django 为 Form 提供的功能

  1. 为渲染准备和重组数据
  2. 为数据创建 HTML 表单
  3. 对用户提交上来的数据和表单进行接收和处理

表单类

Django 拥有一个 Form 类。负责描绘表单,决定表单如何工作和呈现。

处理思路:

  1. 一般单独建立一个 Form.py 的文件进行编写。
  2. 当我们处理表单的时候,应该在 views 中实例化它。

表单类的 fileds 与 HTML 中的<input>元素形成映射

  from django import forms
  
  class NameForm(forms.Form):
      #label标签决定input前面的label内容是什么。max_length限制输入数据的长度,Django会对其进行检查
      your_name = forms.CharField(label=‘Your name‘, max_length=100)
      #生成一个输入密码,widget定义字段在表单中以何种html元素出现,加入attrs,则可以为input增加css类,方便使用bootstrap框架
      password = forms.CharField(widget=forms.PasswordInput(attrs={‘class‘: ‘form-control‘}))
      #生成一个Textarea,required表示字段必须填写,默认开启
      message = forms.CharField(widget=forms.Textarea,required=False)
      #生存一个checkbox
      cc_myself = forms.BooleanField(required=False)

我们可以直接在 HTML 文件中使用 {{ form}}来插入表单,注意,form类生成的代码不包括<form>标签本身以及提交按钮。方便自己插入 css,js或bootstrap框架等

<form action="/your-name/" method="post">
    <--! 使用post方法的时候,必须加上下面这一句 -->
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

上面定义的类生成的 HTML 代码为:

<p><label for="id_subject">your_name:</label>
    <input id="id_your_name" type="text" name="subject" maxlength="100" required /></p>
<p><label for="id_message">Message:</label>
    <textarea name="message" id="id_message" required></text

Django自动为每个input元素设置了一个id名称,对应label的for参数。for属性可把label绑定到另外一个元素上。

每个 Form 实例拥有一个 is_valid() 方法,它对所有字段进行认证,如果所有字段均有效,它将返回 True ,并且将表单的数据放入 cleaned_data 的属性中。

在 views 中使用表单类的一个例子

  from django.shortcuts import render
  from django.http import HttpResponseRedirect
?
  from .forms import NameForm
?
  def get_name(request):
      # 如果form通过POST方法发送数据
      if request.method == ‘POST‘:
          # 创建一个表单实例并通过request.POST中的数据对实例赋值
          form = NameForm(request.POST)
          # 检查表单数据是否有效:
          if form.is_valid():
              # 在form.cleaned_data[‘属性名‘]中找到响应数据,并用来更新数据库或进行其他处理
              # ...
              # redirect to a new URL:
              return HttpResponseRedirect(‘/thanks/‘)
      
      #当用户点击首页登陆按钮跳转到登陆界面的时候,通过GET方法请求数据,这时候就返回一个空的表单,让用户进行填写。
      else:
          form = NameForm()
      
      return render(request, ‘name.html‘, {‘form‘: form})

手动渲染表单字段

当我们需要对表单内的input元素进行额外的控制,如加入css或者引入Bootstrap框架时候,直接用{{ form }}就不行了。这时候可以通过{{ form.name_of_field }}获取表单的每一个字段,然后分别渲染。

{{ form.non_field_errors }}
<div class="fieldWrapper">
    {{ form.subject.errors }}
    <label for="{{ form.subject.id_for_label }}">Email subject:</label>
    {{ form.subject }}
</div>
<div class="fieldWrapper">
    < --! 返回表单的错误信息 -- >
    {{ form.message.errors }}
    <label for="{{ form.message.id_for_label }}">Your message:</label>
    {{ form.message }}
</div>

label标签可以用 label_tag 生成。

<div class="fieldWrapper">
    {{ form.subject.errors }}
    {{ form.subject.label_tag }}
    {{ form.subject }}
</div>

使用模型表单 ModelForm (常用于注册和填写资料界面)

django 提供一个 ModelForm 类,可以利用 model 创建 form。注意,这里的 form 类的数据 要求在数据库里没有相同的元素。否则不能通过is_vaild()验证

用法的核心是:

  1. 首先从django.forms导入ModelForm;从 app 中导入模型类
  2. 编写一个自己的类,继承ModelForm;
  3. 在新类里,设置元类Meta;
  4. 在Meta中,设置model属性为你要关联的ORM模型;
  5. 在Meta中,设置fields属性为你要在表单中使用的字段列表;
  6. 列表里的值,应该是ORM模型model中的字段名。
  7. 在视图里创建一个form类之后,通过实例.save()的方法赋值给 model 类,然后模型实例.save()就可以保存了。
 from django.forms import ModelForm
 from myapp.models import Article
?
# 创建表单类
class ArticleForm(ModelForm):
     class Meta:
         model = Article
         fields = [‘pub_date‘, ‘headline‘, ‘content‘, ‘reporter‘]

当想对某些字段进行自定义的时候,可以显式地声明或指定这些性质,就像在普通表单中一样。如:user_name = forms.CharField(label=‘用户名‘, max_length=20)

也可以使用如下方法:

from django.forms import ModelForm, Textarea
from myapp.models import Author
?
class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = (‘name‘, ‘title‘, ‘birth_date‘)
        widgets = {
            ‘name‘: Textarea(attrs={‘cols‘: 80, ‘rows‘: 20}), # 关键是这一行
        }
        labels = {
            ‘name‘: _(‘Writer‘),
        }
        help_texts = {
            ‘name‘: _(‘Some useful help text.‘),
        }
        error_messages = {
            ‘name‘: {
                ‘max_length‘: _("This writer‘s name is too long."),
            },
        }

原文地址:https://www.cnblogs.com/MayDayTime/p/9712928.html

时间: 2024-07-30 22:47:53

Django中使用表单的相关文章

Django中的Form表单验证

回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错误信息的字典,并会遍历类的所有属性(对应前端待验证的输入域),调用各自的验证方法,将错误信息(两类,必要与否以及格式正确与否)存入字典,并得出最终的验证结果.在使用时,需要定义继承自Form基类不同的Form类,以对应有着不同输入域的Form表单.在拿到前端给的字典前,要先初始化自定义From类,直

Django中的form表单

1,手写一个form表单提交数据 有input标签,让用户可以填数据 校验form表单提数据 提示错误信息 html页面代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>注册</title> </head> <body> <h1>form表单中的注册<

Django中Form表单之字段详解

Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现这些功能,比较便捷. 2.Django form表单的功能 1.生成页面可执行的HTML标签 2.对应户的数据进行校验 3.保留上次输入的内容 3.先用普通方式手写一个注册功能 1.views.py文件中 # 注册 def register(request): error_msg = ""

Django中的文件上传+Ajax详细应用

[001]基于Ajax上传文件 原则:如果我们使用Ajax操作在涉及到文件上传时,那就要使用FormData 1.首先要明白:上传文件使用input输入框的类型是file: 2.后台我需要拿到前端传递过来的文件对象,注意文件对象并不在request.post里面,而是在request.files里面: # 获取文件对象file_obj,如果想获取文件的名字,使用file_obj.name即可 file_obj = request.FILES.get("cFile") 3.content

Django中的ORM 和入门基础

day62  2018-06-12 1. 内容回顾 1. web框架的本质 1. socket 浏览器: socket客户端 服务器: socket服务端 2. HTTP协议:规定了一个收发消息的格式 3. 消息分类 请求(request):浏览器向服务端发送的消息 GET /index/ HTTP/1.1\r\n k1:v1\r\n ...\r\n \r\n 请求体 响应(response): HTTP/1.1 200 OK\r\n k1:v1\r\n ...\r\n \r\n 响应体   

Django中HtttpRequest请求

1.什么是HttpRequest HttpRequest,就是对请求对象的封装,里面封装的是请求过程中的所有信息.在Django中HttpRequest被封装成request对象并封装到视图处理函数中,在调用视图时自动传入 2.HttpRequest中的主要内容 可以使用print(dir(request))查看里面所有的属性及方法. 1.request.scheme : 请求协议 2.request.body : 请求主体 3.request.path : 请求路径 4.request.get

django的表单系统

1.概述: django表单系统中,自定义表单类都是以django.forms.Form为父类进行创建: django中的Form一般有两种功能: 生成特定的HTML标签 后台验证用户提交的数据 2.在views文件中自定义form表单类: # 自定义form表单类 class Userinfo(forms.Form): name = forms.CharField() password = forms.CharField() email = forms.EmailField() message

如何使用表单

如何使用表单 原文:Working with Forms作者:Rick Anderson.Dave Paquette.Jerrie Pelser翻译:姚阿勇(Dr.Yao)校对:孟帅洋(书缘) 这篇文章演示了如何使用表单以及表单中常用的 HTML 元素.HTML 的 Form 元素提供了 Web 应用向服务器回发数据的主要机制.本文的大部分在描述 Tag Helpers 以及它们如何能帮你有效地构建健壮的表单.在阅读本文之前,我们建议你阅读一下 Tag Helpers . 在很多情况下,HTML

django中HttpRequest请求

视图的第一个参数必须是HttpRequest对象 在视图函数中,接收的request有如下属性: path:一个字符串,表示请求的页面的完整路径,不包含域名. method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'.'POST'. 在浏览器中给出地址发出请求采用get方式,如超链接. 在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求. encoding:一个字符串,表示提交的数据的编码方式. 如果为None则表示使用浏览器的默认设置