学了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>