zoukankan      html  css  js  c++  java
  • django表单操作之django.forms

     # -*-coding:utf-8-*-
    from django import forms
    
    
    class ContactForm(forms.Form):
    
        subject = forms.CharField(max_length=100)
        email = forms.EmailField(required=False, label='Your e‐mail address')
    
        """
        forms框架把每一个字段的显示逻辑分离到一组部件(widget)中。 每一个字段类型都拥有一个默认的部件,
        我们也可以容易地替换掉默认的部件,或者提供一个自定义的部件
        """
        message = forms.CharField(widget=forms.Textarea)
    
        """
        Django的form系统自动寻找匹配的函数方法,该方法名称以clean_开头,并以字段名称结束。 如果有这样的
        方法,它将在校验时被调用
        """
        def clean_message(self):
            message = self.cleaned_data['message']
            num_words = len(message.split())
            if num_words < 4:
                raise forms.ValidationError("Not enough words!")
            return message
    # -*-coding:utf-8-*-
    
    from django.core.mail import send_mail
    from django.http import HttpResponseRedirect
    from django.shortcuts import render_to_response
    from contact.forms import ContactForm
    
    
    def contact(request):
        errors = []
        if request.method == 'POST':
            if not request.POST.get('subject'):
                errors.append('Enter a subject.')
            if not request.POST.get('message'):
                errors.append('Enter a message.')
            if request.POST.get('email') and '@' not in request.POST['email']:
                errors.append('Enter a valid e‐mail address.')
            if not errors:
                send_mail(
                        request.POST['subject'],
                        request.POST['message'],
                        request.POST.get('email', 'noreply@example.com'),
                        ['siteowner@example.com'],
                )
                return HttpResponseRedirect('/contact/thanks/')
        return render_to_response('contact_form.html',{'errors': errors})
    
    
    def contact2(request):
        if 'POST' == request.method:
            form = ContactForm(request.POST)
            if form.is_valid():
                cd = form.cleaned_data
                send_mail(cd['subject'],
                          cd['message'],
                          cd.get('email','noreply@example.com'),
                          [])
                return HttpResponseRedirect('/contact/thanks/')
        else:
            """
           传入初始值数据和传入数据以绑定表单是有区别的。 最大的区别是,如果仅传入* 初始值* 数
            据,表单是unbound的,那意味着它没有错误消息。
           """
            form = ContactForm(initial={'subject': 'I love your site!'})
        return render_to_response('contact_form.html', {'form': form})
    <!DOCTYPE html>
    <html>
    <head>
        <title>Contact us</title>
        <style type="text/css">
            ul.errorlist {
                margin: 0;
                padding: 0;
            }
            .errorlist li {
                background-color: red;
                color: white;
                display: block;
                font-size: 10px;
                margin: 0 0 3px;
                padding: 4px 5px;
            }
    </style>
    
    </head>
    <body>
        <!--
            <h1>Contact us</h1>
            {% if errors %}
            <ul>
                {% for error in errors %}
                <li>{{ error }}</li>
                {% endfor %}
            </ul>
            {% endif %}
            <form action="/contact/" method="post">
                <p>Subject: <input type="text" name="subject"></p>
                <p>Your e‐mail (optional): <input type="text" name="email"></p>
                <p>Message: <textarea name="message" rows="10" cols="50"></textarea></p>
                <input type="submit" value="Submit">
            </form>
        -->
        {% if form.errors %}
            <p style="color: red;">
                Please correct the error{{ form.errors|pluralize }} below.
            </p>
        {% endif %}
    
        <form action="" method="post">
            <table>
                {{ form.as_table }}
            </table>
            <input type="submit" value="Submit">
        </form>
    </body>
    </html>
    <!DOCTYPE html>
    <html>
    <head>
        <title>Contact us</title>
    </head>
    <body>
        <h1>Contact us</h1>
        {% if form.errors %}
            <p style="color: red;">
                Please correct the error{{ form.errors|pluralize }} below.
            </p>
        {% endif %}
        <form action="" method="post">
            <div class="field">
                {{ form.subject.errors }}
                <label for="id_subject">Subject:</label>
                {{ form.subject }}
            </div>
            <div class="field">
                {{ form.email.errors }}
                <label for="id_email">Your e‐mail address:</label>
                {{ form.email }}
            </div>
            <div class="field">
                {{ form.message.errors }}
                <label for="id_message">Message:</label>
                {{ form.message }}
            </div>
            <input type="submit" value="Submit">
        </form>
    <!--
    <div class="field{% if form.message.errors %} errors{% endif %}">
    {% if form.message.errors %}
    <ul>
    {% for error in form.message.errors %}
    <li><strong>{{ error }}</strong></li>
    {% endfor %}
    </ul>
    {% endif %}
    <label for="id_message">Message:</label>
    {{ form.message }}
    -->
    </body>
    </html>
  • 相关阅读:
    Eureka相关相关接口和代码位置
    Zookeeper(4)---ZK集群部署和选举
    Zookeeper(3)---java客户端的使用
    Zookeeper(2)---节点属性、监听和权限
    玩转百度地图API(地图,坐标,标记,添加控件,2D图,混合图,智能搜索,地址解析器,信息窗口)
    HTML+CSS系列:CSS选择器(标签、ID、类、通配符、后代、子元素、并集、伪类)
    Git系列:常用命令
    Linux系列:快捷键、目录结构、用户目录
    mybatis-plus系统化学习之更新-AR-主键-service
    mybatis-plus系统化学习之查询专题
  • 原文地址:https://www.cnblogs.com/506740640zl/p/5933148.html
Copyright © 2011-2022 走看看