python - 会员登录页面


account.py 页面 

from django.shortcuts import render, redirect
from django import forms
from app import models
from app.utils.encrypt import md5
from app.utils.bootsrap import BootsrapForm

# 使用form
class LoginForm(BootsrapForm):
    username = forms.CharField(
        label='用户名',
        widget=forms.TextInput
    )
    pwd = forms.CharField(
        label='密码',
        widget=forms.PasswordInput
    )
    # 密码加密 与 数据库对比
    def clean_pwd(self):
        pwd = self.cleaned_data.get('pwd')
        return md5(pwd)

'''用户登录页面'''
def login(request):
    if request.method == 'GET':
        form = LoginForm()
        return render(request, 'login.html', {'form': form})

    form = LoginForm(data=request.POST)
    if form.is_valid():
        pass
        # 注意form 是没有form.save 保存  form.clean_data 来校验数据
        admin_row = models.Admin.objects.filter(**form.cleaned_data).first()
        if not admin_row:
             #提示错误信息
             form.add_error('pwd', '用户名或密码错误!')
             return render(request, 'login.html', {'form': form})
        # 用户名 与 密码输入正确 网站产生随机码 写入用户的cookie 中 ,再写入 session 中

        request.session['info'] = {'id': admin_row.id, 'name': admin_row.username}
        return redirect('/admin/list/')
    return render(request, 'login.html', {'form': form})



BootsrapForm.py

class BootsrapForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环出所有字段, 并用插件 插入 clas 样式
        for name, field in self.fields.items():
            # if name == 'name':
            #     continue
            if field.widget.attrs:
                field.widget.attrs['class'] = 'form-control'
                field.widget.attrs['placeholder'] = field.label
            else:
                field.widget.attrs = {"class": "form-control", "placeholder": field.label}

login,html

{% extends 'layout.html' %}

{% block content %}

"width: 450px; box-shadow: 0 0 10px #ccc; height: 320px; background:#d9edf7; margin-top: 10%; margin-left: 30%; padding: 20px 70px; border-radius:10px ">

class="text-center"> 用户登录

"post" novalidate> {% csrf_token %}
class="form-group"> "color: #f00">{{ form.username.errors.0 }} {{ form.username }}
class="form-group"> "color: #f00">{{ form.pwd.errors.0 }} {{ form.pwd }}
{% endblock%}

效果 : 

页面显示 :

错误提示 :

登录成功跳转 :

 

相关