专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

django2中表单的使用一

一、使用django中自带的表单步骤主要有

  • 1、创建一个项目
  • 2、创建一个app
  • 3、在app里面创建一个forms.py的文件
  • 4、在forms.py中定义字段
    from django import forms

    class MessageForm(forms.Form):
        """
        message的表单校验的
        """
        title = forms.CharField(max_length=100, min_length=2, label='标题')
        content = forms.CharField(widget=forms.Textarea, label='内容')
        email = forms.EmailField(label='邮箱')
        replay = forms.BooleanField(required=False, label='是否记住密码 ')

  • 5、使用自带的表单方式生成前端html页面
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.views import View
    from . import forms
    from . import models

    class MessageView(View):
        def get(self, request, *args, **kwargs):
            form = forms.MessageForm()
            return render(request, 'message.html', context={'form': form})
       ...

  • 6、前端代码
    <form action="/message/" method="post">
        {% csrf_token %}
        <table>
            {{ form.as_table }}
            <tr>
                <td></td>
                <td>
                    <input type="submit" value="提交">
                </td>
            </tr>
        </table>
    </form>

  • 7、使用表单校验及获取输入框的值
    class MessageView(View):
        def get(self, request, *args, **kwargs):
            form = forms.MessageForm()
            return render(request, 'message.html', context={'form': form})

        def post(self, request, *args, **kwargs):
            form = forms.MessageForm(request.POST)
            if form.is_valid():
                print('表单校验成功')
                title = form.cleaned_data.get('title')
                content = form.cleaned_data.get('content')
                email = form.cleaned_data.get('email')
                replay = form.cleaned_data.get('replay')
                print(title, content, email, replay)
                return HttpResponse('成功')
            else:
                print('表单校验失败')
                return HttpResponse('失败')

二、在表单中定义自己的错误提示

  • 1、直接在表单中定义
    class MessageForm(forms.Form):
        """
        message的表单校验的
        """
        title = forms.CharField(max_length=100, min_length=2, label='标题', error_messages={'min_length': '最小是2个字符', 'max_length': '最大是100个字符'})
        content = forms.CharField(widget=forms.Textarea, label='内容', error_messages={'required': '必须写内容'})
        email = forms.EmailField(label='邮箱', error_messages={'required': '邮箱必填'})
        replay = forms.BooleanField(required=False, label='是否记住密码 ')

三、关于表单中常用的字段

  • 1、CharField
    • max_length这个字段最大长度
    • min_length这个字段最小长度
    • required这个字段必填的,默认是必填的
    • error_messages错误提示
  • 2、EmailField
    • required必须填的
    • invalid无效的
  • 3、IntegerField
    • max_value最大值
    • min_value最小值
  • 4、直接使用正则表达式

四、自定义校验器

  • 1、直接使用正则表达式
    from django.core import validators

    class MessageForm(forms.Form):
        """
        message的表单校验的
        """

       mobile = forms.CharField(validators=[validators.RegexValidator(r'1[345678]\d{9}', message='手机号码错误')])

  • 2、异步校验(根据用户输入的手机号码判断数据库里面是否已经有了)
    class RegisterForm(forms.Form):
        """
        用户注册的form
        """
        username = forms.CharField(max_length=18, min_length=3,
                                   error_messages={'max_length': '最多18个字符', 'min_length': '最小3个字符'})
        mobile = forms.CharField(validators=[validators.RegexValidator(r'1[345678]\d{9}', message='手机号码错误')])

        def clean_mobile(self):
            """
            自定义从数据库校验手机号码
            :return:
            """
            mobile = self.cleaned_data.get('mobile')
            exists = models.User.objects.filter(mobile=mobile).exists()
            if exists:
                raise forms.ValidationError(message='{}手机号码已经存在'.format(mobile))
            return mobile

  • 3、多字段的校验(常见密码的校验)
    class RegisterForm(forms.Form):
        """
        用户注册的form
        """
        username = forms.CharField(max_length=18, min_length=3,
                                   error_messages={'max_length': '最多18个字符', 'min_length': '最小3个字符'})
        mobile = forms.CharField(validators=[validators.RegexValidator(r'1[345678]\d{9}', message='手机号码错误')])
        pwd1 = forms.CharField(max_length=18, min_length=6,
                               error_messages={'max_length': '最多16个字符', 'min_length': '最小6个字符'})
        pwd2 = forms.CharField(max_length=18, min_length=6,
                               error_messages={'max_length': '最多16个字符', 'min_length': '最小6个字符'})

        def clean_mobile(self):
            """
            自定义从数据库校验手机号码
            :return:
            """
            mobile = self.cleaned_data.get('mobile')
            exists = models.User.objects.filter(mobile=mobile).exists()
            if exists:
                raise forms.ValidationError(message='{}手机号码已经存在'.format(mobile))
            return mobile

        def clean(self):
            clean_data = super().clean()
            pwd1 = clean_data.get('pwd1')
            pwd2 = clean_data.get('pwd2')
            if pwd1 != pwd2:
                raise forms.ValidationError(message='两次密码不一致')
            return clean_data

五、自己封装一个返回用户输入错误的信息提示

  • 1、直接在form的类中定义
    class RegisterForm(forms.Form):
        """
        用户注册的form
        """
        username = forms.CharField(max_length=18, min_length=3, error_messages={'max_length': '最多18个字符', 'min_length': '最小3个字符'})

       ....

        def get_errors(self):
            """
            自己封装一个错误的返回
            :return:
            """
            errors = self.errors.get_json_data()
            new_errors = {}
            for key, message_dicts in errors.items():
                messages = []
                for message_dict in message_dicts:
                    message = message_dict['message']
                    messages.append(message)
                new_errors[key] = messages
            return new_errors

  • 2、直接在视图中调用函数就可以获取错误信息
    class MessageView(View):
        def get(self, request, *args, **kwargs):
            form = forms.MessageForm()
            return render(request, 'message.html', context={'form': form})

        def post(self, request, *args, **kwargs):
            form = forms.MessageForm(request.POST)
            if form.is_valid():
                print('表单校验成功')
                ...
                return HttpResponse('成功')
            else:
                print('表单校验失败')
                print(form.get_errors())
                return HttpResponse('失败')

  • 3、如果想所有的表单中都具备get_errors方法,可以将他提取到一个公共的基类中
未经允许不得转载:搜云库技术团队 » django2中表单的使用一

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们