Django—用户认证系统(验证登录,注册)

目录

  1. 验证登录
  2. 注册

  • 验证登录


    def index(request):
        # 在后端判断是否登录
        print(request.user.is_authenticated)
        return render(request,'index.html')
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {% if request.user.is_authenticated %}
        {{ request.user.username }}  <a href="{% url 'App02:logout' %}">退出登录</a>
    {% else %}
        你还没有登录,请先 <a href="{% url 'App02:login' %}">登录</a>
    {% endif %}
    </body>
    </html>
  • 注册


    def user_register(request):
        if request.method == "POST":
            form = RegisterForm(request.POST)
            if form.is_valid():
                data = form.cleaned_data
                data.pop("confirm")
                # 把用户写入数据库
                # 密码会做签名,不能手动签名加密password
                user = User.objects.create_user(**data)
                if user:
                    return HttpResponse("注册成功")
                else:
                    return render(request, "register.html",{'form':form})
            else:
                return render(request, "register.html", {'form': form})
        # get请求
        return render(request, "register.html")
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册</title>
    </head>
    <body>
    <form action="{% url 'App02:user_register' %}" method="post">
        {% csrf_token %}
        用户名:<input type="text" name="username">
        {% for error in form.username.errors %}
            <span>{{ error }}</span>
        {% endfor %}
        <br>
        密码:<input type="password" name="password">
        {{ form.password.errors }}
        <br>
        确认密码:<input type="password" name="confirm">
         {{ form.confirm.errors }}
        <br>
        注册时间:<input type="text" name="regtime">
         {{ form.regtime.errors }}
        <br>
        性别:<input type="radio" name="sex" value="0">女
        <input type="radio" name="sex" value="1"> 男
         {{ form.sex.errors }}
        <br>
        <input type="submit" value="注册">
    </form>
    </body>
    </html>
    from django import  forms
    from django.core.exceptions import ValidationError
    from django.forms.utils import ErrorList
    
    
    class RegisterForm(forms.Form):
        def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
                     initial=None, error_class=ErrorList, label_suffix=None,
                     empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None,request=None):
            super().__init__(data,files,auto_id,prefix,label_suffix,empty_permitted,field_order,use_required_attribute,renderer)
            self.request = request
    
        username = forms.CharField(min_length=3,required=True,error_messages={
            'required':'用户名必须输入',
            'min_length':'用户名至少3个字符'
        })
        password = forms.CharField(min_length=3,required=True,error_messages={
            'required': '密码名必须输入',
            'min_length': '密码至少3个字符'
        })
        confirm = forms.CharField(min_length=3,required=True,error_messages={
            'required': '密码名必须输入',
            'min_length': '密码至少3个字符'
        })
        regtime = forms.DateTimeField(required=False,error_messages={
            'invalid':'日期格式错误',
        })
        sex = forms.BooleanField(required=False)
    
        # 单个字段验证: clean_xxxx
        def clean_password(self):
            password = self.cleaned_data.get('password')
            if password and password.isdigit():
                raise ValidationError("密码不能是纯数字")
            return password
    
    
        # 全局验证
        def clean(self):
            password = self.cleaned_data.get('password',None)
            confirm = self.cleaned_data.get('confirm','')
            print(password,confirm)
            if password != confirm:
                raise ValidationError({'confirm':"两次密码输入不一致"})
            return self.cleaned_data
发布了199 篇原创文章 · 获赞 6 · 访问量 2458

猜你喜欢

转载自blog.csdn.net/piduocheng0577/article/details/105030460