django用forms组件实现登录及注册页面 后台表单验证

学了forms组件之后,可以在后台进行表单验证了,下面是自己写的简单实现,不足之处请反馈哈!~~~~还有哈,代码存在bug,没有优化,只是简单写了写,毕竟刚开始学习,只是提供一点参考。

1,models.py

class User(models.Model):
    class Meta:
        db_table='用户'
        verbose_name_plural='用户'
    name=models.CharField(max_length=16,verbose_name='用户名',unique=True)
    gender=models.BooleanField(default=False,verbose_name='性别')
    img=models.ImageField(upload_to='icons',verbose_name='头像')
    account=models.CharField(max_length=20,verbose_name='账户',unique=True)
    password=models.CharField(max_length=25,verbose_name='密码')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    isDelete=models.BooleanField(default=False,verbose_name='是否删除')

    def __str__(self):
        return self.name

2.views.py

from django import forms
from django.http import HttpResponse
from django.shortcuts import render, redirect
from .models import User
class Myregist_form(forms.Form):
    username=forms.CharField(
        label='昵称',
        required=True,
    )
    img=forms.ImageField(
        label='头像',
        required=True,
    )
    gender=forms.ChoiceField(
        label='性别',
        required=True,
        initial=None,
        choices=((0, '男'), (1, '女')),
        widget=forms.widgets.RadioSelect()
    )
    account=forms.CharField(
        label='账号',
        required=True,
        initial=None,
        widget=forms.widgets.TextInput()
    )
    password=forms.CharField(
        label='密码',
        required=True,
        initial=None,
        widget=forms.widgets.PasswordInput()
    )
    sure_password = forms.CharField(
        label='确认密码',
        required=True,
        initial=None,
        widget=forms.widgets.PasswordInput()
    )
class Mylogin_form(forms.Form):
    account=forms.CharField(
        label='账号',
        required=True,
        initial=None,
        widget=forms.widgets.TextInput()
    )
    password=forms.CharField(
        label='密码',
        required=True,
        initial=None,
        widget=forms.widgets.PasswordInput()
    )


def regist(request):
    form=Myregist_form()
    if request.method=='GET':
        return render(request,'regist.html',locals())
    elif request.method=='POST':
        form=Myregist_form(request.POST,request.FILES)
        if form.is_valid():
            information=form.cleaned_data
            if information.get('password')==information.get('sure_password'):
                user=User()
                user.name=information.get('username')
                user.gender=information.get('gender')
                user.img=information.get('img')
                user.account=information.get('account')
                user.password=information.get('password')
                user.save()
            return HttpResponse('注册成功!')
        return render(request,'regist.html',locals())


def login(request):
    user=Mylogin_form()
    if request.method=='GET':
        return render(request,'login.html',locals())
    else:
        user=Mylogin_form(request.POST)
        if user.is_valid():
            information=user.cleaned_data
            account=information.get('account')
            if User.objects.get(account=account).account==account:
                user1=User.objects.get(account=account)
                if user1.password==information.get('password'):
                    print(type(user1.name))
                    request.session['username']=user1.name
                    return redirect('index')
                else:
                    return HttpResponse('密码错误')
            else:
                return HttpResponse('用户不存在')

def index(request):
    user=request.session.get('username')
    url="personal"
    return render(request,'index.html',locals())

3.urls.py

from django.urls import re_path
from . import views

urlpatterns= [
    re_path(r'login/$',views.login,name='login'),
    re_path(r'regist/$',views.regist,name='regist'),
    re_path(r'index/$',views.index,name='index'),
]

4.模板

登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录窗口</title>
</head>
<body>
<form action="{% url 'login' %}" method="post" novalidate>
	{%csrf_token%}
    {% for foo in user %}
        <p>{{ foo.label }}:{{ foo }}   </p>
    {% endfor %}
<button>登录</button>
</form>
<br>
<a href="{% url 'regist' %}">注册</a>
</body>
</html>

注册页面

<!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
    <meta charset="UTF-8">
    <title>注册账号</title>
</head>
<body>
<form action="{% url 'regist' %}" method="post" enctype="multipart/form-data" novalidate>
	{%csrf_token%}
    {% for user in form %}
        <p>{{user.label}}:{{ user }}</p>
    {% endfor %}
    <button>注册</button>
</form>
</body>
</html>

首页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<span>欢迎您!用户:</span><a href="{{ url }}">{{ user }}</a>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值