Day_06

用户名/密码登录

1.python生成图片+写文字

https://www.cnblogs.com/wupeiqi/articles/5812291.html

pip install pillow

image

2.session和cookie的关系

image

image
图片验证码思路:
image

3.页面显示

image

4.登录

LoginForm
class LoginForm(BootStrapForm,forms.Form):
    username = forms.CharField(label="手机号/邮箱")
    password = forms.CharField(
        label='密码',
        min_length=8,
        max_length=16,
        error_messages={
            'min_length': "密码长度不能小于8个字符",
            'max_length': "密码长度不能大于16个字符",
        },
        widget=forms.PasswordInput(),# 添加 render_value = True可以让密码保留
    )
    code = forms.CharField(label="图片验证码")

    def __init__(self,request,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.request = request

    def clean_password(self):
        pwd = self.cleaned_data["password"]
        return md5(pwd)

    def clean_code(self):
        """图片验证码的钩子"""
        # 读取用户输入的
        code = self.cleaned_data["code"]
        # 去session中获取自己的验证码
        session_code = self.request.session.get("image_code")
        if not session_code:
            raise ValidationError("验证码已过期,请重新获取")
        if code.strip().upper() != session_code:
            raise ValidationError("验证码输入错误")
        return code
视图中的login函数
def login(request):
    """ 用户名和密码登录 """
    if request.method == "GET":
        form = LoginForm(request)
        return render(request, "login.html", {"form": form})
    form = LoginForm(request,data=request.POST)
    if form.is_valid():
        username = form.cleaned_data["username"]
        password = form.cleaned_data["password"]

        # user_object = models.UserInfo.objects.filter(username=username,password=password).first()
        # 手机=手机 and 密码=密码 or 邮箱=邮箱 and 密码=密码

        user_object = models.UserInfo.objects.filter(Q(email=username) | Q(mobile_phone=username)).filter(password=password).first()

        if user_object:
            # 用户名和密码正确
            request.session["user_id"] = user_object.id
            request.session.set_expiry(60*60*24*14)

            return redirect("index")

        form.add_error("username","用户名或密码错误")

    return render(request,"login.html",{"form":form})
posted @ 2023-05-04 16:26  Cool-Bo  阅读(54)  评论(0)    收藏  举报