• jQuery火箭图标返回顶部代码


    使用表单

    表单用 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."),
                },
            }
  • 相关阅读:
    JavaScript:Number 对象
    JavaScript:Math 对象
    杂项:引用资源列表
    小团队管理与大团队管理
    技术转管理
    【翻译+整理】.NET Core的介绍
    自己开发给自己用的个人知识管理工具【脑细胞】,源码提供
    关于【自证清白】
    这篇博客能让你戒烟——用程序员的思维来戒烟!
    如果我是博客园的产品经理【下】
  • 原文地址:https://www.cnblogs.com/MayDayTime/p/9712928.html
Copyright © 2020-2023  润新知