06-Django表单

d:/python/demo3

目标

  • form表单
  • get/post
  • Request对象
  • 利用HTML表单开发注册功能
  • Django表单改造注册功能
  • 数据绑定与校验(了解)
  • 数据验证错误信息(了解)
  • 实战任务

表单

表单有如下特征:

  • 1、通过各种

    用户名:

    密码:

    邮件地址:

    自我介绍:

    success.html

    
    
    
        
        Neuedu Django ch03
    
    
    

    恭喜注册成功!您的用户信息如下:

    昵 称: {{ nickname }}

    用 户 名: {{ username }}

    邮件地址: {{ email }}

    自我介绍: {{ self_intro }}

    8)运行效果


    06-Django表单_第1张图片
    image.png
    06-Django表单_第2张图片
    image.png

    Django表单改造注册功能(中英文两套)

    d:/python/demo3
    上述功能,如果页面需要提交的字段比较多,后台views会特别麻烦。用Django表单组件可以简化这部分工作

    Django带有一个form库,称为django.forms,这个库可以处理包括HTML表单显示以及验证的很多内容。接下来我们来深入了解一下form库,学习如何使用Django表单,最后试着使用它来重写我们的用户注册功能。
    1)我们在settings目录创建一个python文件,form.py,继承自django.forms.Form,在RegisterForm中定义一些属性,与模型写法类似

    from django import forms
    
    
    class RegisterForm(forms.Form):
        nickname = forms.CharField(max_length=20)
        username = forms.CharField()
        password = forms.CharField()
        email = forms.EmailField(required=False)
        self_intro = forms.CharField(required=False, widget=forms.Textarea)
    
    class RegisterFormChinese(forms.Form):
        nickname = forms.CharField(max_length=20, label='昵称')
        username = forms.CharField(label='用户名')
        password = forms.CharField(label='密码')
        email = forms.EmailField(required=False, label='邮件地址')
        self_intro = forms.CharField(required=False, widget=forms.Textarea, label='自我介绍')
    

    2)改造views.py关键代码

    from demo3.form import RegisterForm, RegisterFormChinese
    def register(request):
        # get请求访问页面时,返回空表单,post请求提交数据时进行表单验证和页面跳转
        if request.method == 'POST':
            form = RegisterForm(request.POST)
            if form.is_valid():
                return render(request, 'success.html', {'form': form})
        else:
            form = RegisterForm()
        return render(request, 'register.html', {'form': form})
    
    
    def register_chinese(request):
        if request.method == 'POST':
            form = RegisterFormChinese(request.POST)
            if form.is_valid():
                # 将用户提交的表单回显,并设置不可编辑
                # form.fields 返回一个OrderedDict
                # 我们遍历这个存储着表单字段的字典,并通过widget.attrs设定他们的html属性
                for f in form.fields.values():
                    f.widget.attrs['disabled'] = 'disabled'
                return render(request, 'success.html', {'form': form})
        else:
            form = RegisterFormChinese()
        return render(request, 'register_chinese.html', {'form': form})
    

    3)改造register.html

    {% csrf_token %} {{ form }}

    4)register_chinese.html

    {% csrf_token %} {{ form }}

    4)改造success.html

    
    

    注册成功

    {{ form }}

    5)formapp.urls.py

    from django.urls import path
    from . import views
    urlpatterns = [
        path('', views.goregister, name='goregister'),
        path('register/', views.register),
        path('register_chinese/', views.register_chinese),
    ]
    

    6)启动服务

    python manage.py runserver
    

    7)浏览器输入地址测试

    http://127.0.0.1:8000/forms/register/
    http://127.0.0.1:8000/forms/register_chinese/
    

    数据绑定与校验证(了解)

    form.is_bound()属性查看表单对象是否已经绑定
    form.is_valid()是否所有字段验证通过,返回True/False

    数据验证错误信息(了解)

    f.errors()提供了一个字段与错误消息相映射的字典表。

    代码解释

    我们将页面展示与页面提交的地址都设置为formapp/register
    在视图中通过request对象的method方法判断页面请求的get/post方法,进行不同的操作。
    当页面提交get请求时(直接访问url地址),初始化一个空的表单对象,并返回给页面。
    当页面提交post请求时(通过页面html提交表单时),验证表单并跳转到成功页面。

你可能感兴趣的:(06-Django表单)