from 的使用

使用form实现登录

views
from django.shortcuts import render,redirect,HttpResponse
from app01 import models
from app01 import myform
from utils import md5_tool
# Create your views here.
def login(request):
    if request.method=='GET':
        return render(request,'auth/login.html')
    else:
        username=request.POST.get('username')
        password=request.POST.get('password')
        user_obj=models.Userinfo.objects.filter(username= username,password=password)
        if user_obj:
            return redirect('home')
        else:
            return render(request,'auth/login.html',{'errors':'用户密码有误'})

def register(request):
    if request.method=='GET':
        form_obj = myform.UserInForm()
        return render(request, 'auth/register.html', {'form_obj': form_obj})
    else:
        form_obj = myform.UserInForm(request.POST)
        if form_obj.is_valid():
            new_data = form_obj.cleaned_data
            new_data.pop('r_password')
            new_data['password'] = md5_tool.set_md5(new_data['password'], new_data['username'])
            models.Userinfo.objects.create(
                **new_data
            )
            return redirect('login')
        else:
            return render(request, 'auth/register.html', {'form_obj': form_obj})

def home(request):
    return render(request,'home.html')

myform.py

from app01 import models
from django import forms
from django.core.exceptions import ValidationError

#自定义
def mobile_validate(value):
    mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
    if not mobile_re.match(value):
        raise ValidationError('手机号码格式错误')
#form组件
class UserInForm(forms.Form):
    username = forms.CharField(
        min_length=2,
        widget=forms.TextInput(attrs={'class': 'username', 'placeholder': '您的用户名', 'autocomplete': 'off', }),
        error_messages={
            'min_length': '最短不能小于2个字符',
            'required': '用户名不能为空!'
        }

    )
    password = forms.CharField(
        min_length=6,
        widget=forms.PasswordInput(attrs={'class': 'password', 'placeholder': '输入密码', 'oncontextmenu': 'return false',
                                          'onpaste': 'return false', }),
    )
    r_password = forms.CharField(

        min_length=6,
        widget=forms.PasswordInput(attrs={'class': 'password', 'placeholder': '再次输入密码', 'oncontextmenu': 'return false',
                                          'onpaste': 'return false', }),
        error_messages={
            'min_length': '最短不能小于6个字符',
            'required': '确认密码不能为空!'
        }
    )

    telephone = forms.CharField(
        min_length=11,
        max_length=11,
        validators=[mobile_validate, ],
        error_messages={
            'required':'手机号不能为空!!'
        },
    widget = forms.TextInput(attrs={'placeholder': '请输入手机号'})

    )

    email = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': '请输入邮箱'}),
        error_messages={
            'required': '邮箱不能为空!'
        },
    )
    #局部钩子
    def clean_username(self):
        value = self.cleaned_data.get('username')
        ret=models.Userinfo.objects.filter(
            username=value,
        )
        if ret:
            raise ValidationError('用户名已经存在')
        else:
            return value

    # 局部钩子
    def clean_telephone(self):
         value=self.cleaned_data.get('telephone')
         if len(value) !=11:
             raise ValidationError('请输入11位手机号')
         else:
             return value

    # 局部钩子
    def clean_email(self):
         value=self.cleaned_data.get('email')
         ret=re.compile(r'\[email protected]$')
         if ret.match(value):
             return value
         else:
             raise ValidationError('必须是163邮箱!')

    # 全局钩子
    def clean(self):
        p1 = self.cleaned_data.get('password')
        p2 = self.cleaned_data.get('r_password')

        if p1 == p2:
            return self.cleaned_data
        else:
            self.add_error('r_password', '两次密码不一致!')

register.html

{% load static %}
<!DOCTYPE html>
<!-- saved from url=(0063)http://www.jq22.com/demo/jquery-Sharelink20151012/register.html -->
<html lang="zh-CN">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>注册丨Sharelink</title>
    <link rel="stylesheet" href="{% static 'auth/css/style.css' %}">
</head>
<body>
<div class="register-container">
    <h1>ShareLink</h1>
    <div class="connect">
        <p style="">Link the world. Share to world.</p>
    </div>
    <form action="{% url 'register' %}" method="post" id="registerForm"
          novalidate="novalidate">
        {% csrf_token %}
        <div>
            {{ form_obj.username }}
            <span style="color:red;font-size: 12px;">{{ form_obj.username.errors.0 }}</span>
        </div>
        <div>
            {{ form_obj.password }}
            <span style="color:red;font-size: 12px;">{{ form_obj.password.errors.0 }}</span>

            <!--oncontextmenu="return false" 标签上不能点击右键  onpaste="return false"不能往标签上粘贴内容  autocomplete="off"取消历史记录提示-->
        </div>
        <div>
            {{ form_obj.r_password }}
            <span style="color:red;font-size: 12px;">{{ form_obj.r_password.errors.0 }}</span>
        </div>
        <div>
            {{ form_obj.telephone }}
            <span style="color:red;font-size: 12px;">{{ form_obj.telephone.errors.0 }}</span>
        </div>
        <div>
            {{ form_obj.email }}
            <span style="color:red;font-size: 12px;">{{ form_obj.email.errors.0 }}</span>
        </div>
        <button id="submit" type="submit">注 册</button>
    </form>
    <a href="{% url 'login' %}">
        <button type="button" class="register-tis">已经有账号?</button>
    </a>
</div>
<script src="{% static 'auth/js/jquery.min.js' %}"></script>
{#<script src="{% static 'auth/js/jquery.min.js' %}"></script>#}
<script src="{% static 'auth/js/common.js' %}"></script>

<script src="{% static 'auth/js/supersized.3.2.7.min.js' %}"></script>
<script src="{% static 'auth/js/supersized-init.js' %}"></script>

<script src="{% static 'auth/js/jquery.validate.min.js' %}"></script>
</body>
</html>

login.html

{% load static %}
<!DOCTYPE html>
<!-- saved from url=(0050)http://www.jq22.com/demo/jquery-Sharelink20151012/ -->
<html lang="zh-CN">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>登陆丨Sharelink</title>
    <link rel="stylesheet" href="{% static 'auth/css/style.css' %}">
</head>
<body>
<div class="login-container">
    <h1>ShareLink</h1>
    <div class="connect">
        <p style="">Link the world. Share to world.</p>
    </div>
    <form action="{% url 'login' %}" method="post" id="loginForm"
          novalidate="novalidate">
        {% csrf_token %}
        <div style="color:red;font-size: 12px;">{{ errors }}</div>
        <div>
            <input type="text" name="username" class="username" placeholder="用户名" autocomplete="off">
        </div>
        <div>
            <input type="password" name="password" class="password" placeholder="密码" oncontextmenu="return false" onpaste="return false">
        </div>
        <button id="submit" type="submit">登 陆</button>
    </form>
    <a href="{% url 'register' %}">
        <button type="button" class="register-tis">还有没有账号?</button>
    </a>
</div>

<script src="{% static 'auth/js/jquery.min.js' %}"></script>
{#<script src="{% static 'auth/js/jquery.min.js' %}"></script>#}
<script src="{% static 'auth/js/common.js' %}"></script>

<script src="{% static 'auth/js/supersized.3.2.7.min.js' %}"></script>
<script src="{% static 'auth/js/supersized-init.js' %}"></script>

<script src="{% static 'auth/js/jquery.validate.min.js' %}"></script>

</body>
</html>

原文地址:https://www.cnblogs.com/x-h-15029451788/p/12014114.html

时间: 2024-11-05 13:48:12