python笔记(web后端,Django,form组件)

在这里插入图片描述
在这里插入图片描述
几个常用属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
正则校验

在这里插入图片描述

在这里插入图片描述

实际操作:
1、简单显示:
py代码:

from django import forms
from django.forms import widgets
class RegForm(forms.Form):
    name = forms.CharField(max_length=16,label='用户名')
    passwd = forms.CharField( widget=widgets.PasswordInput(),min_length=3,label='密码',error_messages={
        'minlength':'密码不能少于3位',
        'max_length':'密码不能超过十位'
    })

def reg(request):
    form_obj = RegForm()
    if request.method == 'POST':
        form_obj = RegForm(request.POST)
        # 让form帮我们做校验
        if form_obj.is_valid():
            pass
    return render(request,'test_test.html',{'form_obj':form_obj})

JS代码:

<form action="/reg/" method="post">
    {{ form_obj.as_p }}
    {{ form_obj.errors.pwd}}
    <p><input type="submit"></p>
</form>

2、form表单登陆验证
py代码:

import re
from django import forms
from django.forms import widgets
from django.core.validators import RegexValidator,ValidationError
class RegForm(forms.Form):
    # 正则匹配1
    # name = forms.RegexField(
    #     regex = '^[0-9]+@[0-9a-z]+.com$',
    #     max_length=20,
    #     label='用户名',
    #     widget = widgets.TextInput(attrs={'class':'form-control user'}),
    #     error_messages={
    #         'regex' : '用户格式不正确',
    #         'max_length': '用户名不能大于20位数'
    #     }
    # )
    # 正则匹配2
    name = forms.CharField(
        max_length=20,
        label='用户名',
        widget = widgets.TextInput(attrs={'class':'form-control user'}),
        validators=[
            RegexValidator('^[0-9]+@[0-9a-z]+.com$','用户格式不正确')
            # RegexValidator('^[0-9]+@[0-9a-z]+.com$', '用户格式不正确')
        ]
    )

    passwd = forms.CharField(
        #render_value=True:提交后记录不清除
        widget=forms.PasswordInput(attrs={'class':'form-control'},render_value=True),
        max_length=20,
        label='密码',
        min_length=5,
        error_messages={
            'min_length':'密码不能少于5位数',
            'max_length':'密码不能大于20位数'
        }
    )
    repasswd = forms.CharField(
        #render_value=True:提交后记录不清除
        widget=forms.PasswordInput(attrs={'class':'form-control'},render_value=True),
        max_length=20,
        label='确认密码',
        min_length=5,
        error_messages={'required':'改处不能为空',
                        'min_length':'密码不能少于5位数'}
    )
    city = forms.ChoiceField(
        choices = models.Publisher.objects.all().values_list('id','name'),
        label = '城市',
        initial=1,
        widget=forms.widgets.Select
    )
    #重写父类的init法
    def __init__(self,*args,**kwargs):
        super.__init__(*args,**kwargs)
        self.fields.widget.choices = models.Publisher.objects.all().values_list('id','name')

    # 重写父类的clean方法
    def clean(self):
        # 此时通过校验的数据都保存在self。cleaned_data
        passwd = self.cleaned_data.get('passwd')
        repasswd = self.cleaned_data.get('repasswd')
        if passwd != repasswd:
            self.add_error('repasswd',ValidationError('两次密码不一致'))
            raise ValidationError('两次密码不一致')
        return self.cleaned_data



def login_text(request):
    login_check = RegForm()
    if request.method == 'POST':
        login_check = RegForm(request.POST)
        if login_check.is_valid():
            # 所有通过校验的数据都以字典的形式保存在login_check.cleaned_data中
            del login_check.cleaned_data['repasswd']
            print(login_check.cleaned_data)
            models.UserInfo.objects.create(**login_check.cleaned_data)
            return HttpResponse('success')
    return render(request,'form表单登陆示例.html',{'login_check':login_check})
def reuser_check(request):
    erro = ''
    user_info = request.POST.get('user_info')
    patter = re.compile('^[0-9]+@[0-9a-z]+.com$')
    if models.UserInfo.objects.filter(name=user_info):
        erro = '用户已存在'
        return HttpResponse(erro)
    elif patter.findall(user_info) == []:
        erro = '用户格式不正确'
    return HttpResponse(erro)

JS代码:

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="UTF-8">
    <title>form表单登陆示例</title>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
    <style>
        .row{
            margin-top: 200px;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="row col-md-offset-3 col-md-6">
{#        novalidate:不用浏览器做校验#}
        <form action="/login_text/" method="post" novalidate>
        <div class="form-group {% if login_check.name.errors.0 %} has-error {% endif %}">
            {{ login_check.name.label }}
            {{ login_check.name }}
            <span class="help-block rename">{{ login_check.name.errors.0 }}</span>
        </div>
        <div class="form-group {% if login_check.passwd.errors.0 %} has-error {% endif %}">
            {{ login_check.passwd.label }}
            {{ login_check.passwd }}
            <span class="help-block">{{ login_check.passwd.errors.0 }}</span>
        </div>
        <div class="form-group {% if login_check.repasswd.errors.0 %}has-error {% endif %}">
            {{ login_check.repasswd.label }}
            {{ login_check.repasswd }}
            <span class="help-block">{{ login_check.repasswd.errors.0 }}</span>
        </div>
        <div class="form-group">
            <input type="submit" class="btn btn-info">
        </div>

{#        选择城市#}
        <div class="form-group">
            {{ login_check.city.label }}
            {{ login_check.city }}
        </div>
        </form>
    </div>
</div>

<script src="{% static 'sweetalert/sweetalert.min.js' %}"></script>
<script src="{% static 'jquery-3.2.1.min.js' %}"></script>
<script>
$(document).ready(function () {
    $('.user').on('blur',function () {
        user_info = $(this).val();
        $.ajax({
            url:'/reuser_check/',
            type:'post',
            data:{'user_info':user_info},
            success:function (arg) {
                $('.rename').text(arg);
            }
        })
    })

})
</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_41433183/article/details/88353984