Django2.2.1利用django.forms快速生成表单

Django2.2.1利用django.forms快速生成表单

django.forms这个Django的内置包

这个包用于快速生成表单,可以根据需要调整表单的内容,样式,以及增加检查机制。(其实就是form的model)

代码

创建forms.py文件

Django习惯于在forms.py文件中去寻找利用django.forms包构建的表单。
所以应当在当前app的路径下创建forms.py文件
forms.py文件内容如下:

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    email = forms.EmailField(required=False)
    message = forms.CharField(widget=forms.Textarea)
    #在django.forms生成的子类中,以“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

创建对应的模板

在当前app的“templates/app名称/”路径下创建一个contact_form.html的模板文件(template)

<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">
        <!--{% csrf_token %}-->
        <table>
        	<!--让form以table形式展现-->
            {{ form.as_table }}
        </table>
        <input type="submit" value="Submit">
    </form>
</body>
</html>

修改当前app的views.py文件

from polls.forms import ContactForm

def contactnew(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            send_mail(
                cd['subject'],
                cd['message'],
                cd.get('email', 'noreply@example.com'),
                ['siteowner@example.com'],
            )
            return HttpResponseRedirect('/contact/thanks/')
    else:
        form = ContactForm(
                initial={'subject': 'I love your site!'}
                )
    return render_to_response('polls/contact_form.html', {'form': form})

修改当前app的urls.py文件

urlpatterns = [
	...
    path('contactnew/', views.contactnew, name='contactnew'),
]

问题

如果在浏览http://localhost:8000/polls/contact_new/时出现了
Error403 CSRF verification failed. Request aborted.
这个错误,有一下两种解决办法:
参考链接:参考链接
1.在contact_form.html的所有遇到POST的form中加上

<form action="" method="post">
        {% csrf_token %}

2.在Django项目的settings.py文件中把下面这一行注释掉

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值