• 9:django 表单


    django自带表单系统,这个表单系统不仅可以定义属性名,还可以自己定义验证,更有自己自带的错误提示系统

    这节我们仅仅粗略的来看一下django表单系统的入门运用(具体的实在太多东西,主要是我觉得有很多东西不是很适合现在的我使用,等以后需要的时候再回来看看吧)

    定义表单

    from django import forms
    #所有的表单类都应该是forms.Form的子类
    class ContactForm(forms.Form):
        subject = forms.CharField(max_length=100)
        message = forms.CharField()
        sender = forms.EmailField()
        cc_myself = forms.BooleanField(required=False)

    如果你想在现有的model建立表单,可以这样写

    from django.forms import ModelForm
    # Create the form class.
    class ArticleForm(ModelForm):
        class Meta:
            model = Article

    在视图函数中使用表单

    from django.shortcuts import render
    from django.http import HttpResponseRedirect
    
    def contact(request):
        if request.method == 'POST': # If the form has been submitted...
            form = ContactForm(request.POST) # A form bound to the POST data
            if form.is_valid(): # All validation rules pass
                # Process the data in form.cleaned_data
                subject = form.cleaned_data['subject']#使用cleaned_data而不是request.POST,因为前者前者不仅已经通过验证并且都是所有的内容都已经转成了符合python标准的类型
                message = form.cleaned_data['message']
                sender = form.cleaned_data['sender']
                cc_myself = form.cleaned_data['cc_myself']
    
                recipients = ['info@example.com']
                if cc_myself:
                    recipients.append(sender)
    
                from django.core.mail import send_mail
                send_mail(subject, message, sender, recipients)
                return HttpResponseRedirect('/thanks/') # Redirect after POST
        return HttpResponseRedirect('/thanks/') # Redirect after POST else: form = ContactForm() # An unbound form return render(request, 'contact.html', { 'form': form, })

    在模板中使用表单

    <form action="/contact/" method="post">
    {% csrf_token %}<!-- djnago 强制使用跨站点请求伪造保护(Cross Site Request Forgery protection)-->
    {{ form.as_p }}
    <input type="submit" value="Submit" />
    </form>

    form.as_p的效果如下:

    <p><label for="id_subject">Subject:</label>
        <input id="id_subject" type="text" name="subject" maxlength="100" /></p>
    <p><label for="id_message">Message:</label>
        <input type="text" name="message" id="id_message" /></p>
    <p><label for="id_sender">Sender:</label>
        <input type="text" name="sender" id="id_sender" /></p>
    <p><label for="id_cc_myself">Cc myself:</label>
        <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>

    如果你不想使用django默认的模板,可以自定义自己的模板,示例如下

    <form action="/contact/" method="post">
        {{ form.non_field_errors }}
        <div class="fieldWrapper">
            {{ form.subject.errors }}
            <label for="id_subject">Email subject:</label>
            {{ form.subject }}
        </div>
        <div class="fieldWrapper">
            {{ form.message.errors }}
            <label for="id_message">Your message:</label>
            {{ form.message }}
        </div>
        <div class="fieldWrapper">
            {{ form.sender.errors }}
            <label for="id_sender">Your email address:</label>
            {{ form.sender }}
        </div>
        <div class="fieldWrapper">
            {{ form.cc_myself.errors }}
            <label for="id_cc_myself">CC yourself?</label>
            {{ form.cc_myself }}
        </div>
        <p><input type="submit" value="Send message" /></p>
    </form>

    你可以这样遍历表单域

    <form action="/contact/" method="post">
        {% for field in form %}
            <div class="fieldWrapper">
                {{ field.errors }}
                {{ field.label_tag }}: {{ field }}
            </div>
        {% endfor %}
        <p><input type="submit" value="Send message" /></p>
    </form>

    下面是每个{{filed}}都应该有的属性

    {{ field.label }}
    The label of the field, e.g. Email address.
    {{ field.label_tag }}
    The field’s label wrapped in the appropriate HTML <label> tag, e.g. <label for="id_email">Email address</label>
    {{ field.value }}
    The value of the field. e.g someone@example.com
    {{ field.html_name }}
    The name of the field that will be used in the input element’s name field. This takes the form prefix into account, if it has been set.
    {{ field.help_text }}
    Any help text that has been associated with the field.
    {{ field.errors }}
    Outputs a <ul class="errorlist"> containing any validation errors corresponding to this field. You can customize the presentation of the errors with a {% for error in field.errors %} loop. In this case, each object in the loop is a simple string containing the error message.
    field.is_hidden
    This attribute is True if the form field is a hidden field and False otherwise. It’s not particularly useful as a template variable, but could be useful in conditional tests such as:
    
    {% if field.is_hidden %}
       {# Do something special #}
    {% endif %}

    p

  • 相关阅读:
    SM3国密算法标准中两个实例的实现
    2017-2018《网络攻防技术》第十周作业
    2017-2018《网络攻防技术》第九周作业
    2017-2018网络攻防技术第八周作业
    第十一周作业
    指针学习
    2017-2018第七周网络攻防作业
    2017-2018网络攻防第六周作业
    2017-2018网络攻防第五周作业
    spark要我命_2_算了,不起标题了
  • 原文地址:https://www.cnblogs.com/qwj-sysu/p/4193830.html
Copyright © 2020-2023  润新知