学生登录
概述
表单既可以在模板页面利用HTML编写,也可以使用Django提供的表单类编写。
相关属性参考官网:https://docs.djangoproject.com/en/1.11/ref/forms/fields/
实现熟悉的用户登录功能
1. 创建新应用account
2. settings中添加应用
3. 配置URL
4. 在account应用中创建forms.py文件
5. 编写views函数
6. 创建模板页面
7. 启动服务器运行程序
配置URL
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^account/',include('account.urls',namespace='account',app_name='account'))
]#coding=utf-8
from django.conf.urls import url
import views
urlpatterns=[
url(r'^login/$',views.login_view,name='login')
]#coding=utf-8
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(label=u'用户名')
password = forms.CharField(label=u'密码',widget=forms.PasswordInput)
Views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render
from .forms import LoginForm
from django.contrib.auth import authenticate,login
# Create your views here.
def login_view(request):
if request.method=='GET':
login_form = LoginForm()
return render(request,'login.html',{'login_form':login_form})
else:
login_form= LoginForm(request.POST)
#校验表单数据是否合法
if login_form.is_valid():
#以字典形式返回合法数据
cd = login_form.cleaned_data
print cd
#检验用户输入的用户和密码是否正确
user = authenticate(username=cd['username'],password=cd['password'])
print user
if user:
#实现用户登录,将用户信息保存到session中完成登录操作
login(request,user)
return HttpResponse('success')
return HttpResponse('failed')前端页


学生注册
应用场景
1. 查询时表单类只需要继承于forms.Form。
2. 增删改时表单类需要继承于forms.ModelForm。
创建模型类
class Clazz(models.Model):
cno = models.AutoField(primary_key=True)
cname = models.CharField(max_length=20)
def __unicode__(self):
return u'Clazz:%s'%self.cname
class Stu(models.Model):
sno = models.AutoField(primary_key=True)
sname = models.CharField(max_length=30)
clazz = models.ForeignKey(Clazz,on_delete=models.CASCADE)
def __unicode__(self):
return u'Stu:%s,%s'%(self.sno,self.sname)
创建表单类(应用包下创建forms.py)
class Add_Clazz(forms.ModelForm):
class Meta:
model = Clazz
#元组形式
fields = ('cname',)
class Add_Stu(forms.ModelForm):
class Meta:
model = Stu
fields = ('sname',)
配置URL
urlpatterns = [
url(r'^login/$', views.login_view, name='login'),
url(r'^register/$', views.register)
]
Views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render
from .forms import *
from django.contrib.auth import authenticate,login
# Create your views here.
def login_view(request):
if request.method=='GET':
login_form = LoginForm()
return render(request,'login.html',{'login_form':login_form})
else:
login_form= LoginForm(request.POST)
#校验表单数据是否合法
if login_form.is_valid():
#以字典形式返回合法数据
cd = login_form.cleaned_data
print cd
#检验用户输入的用户和密码是否正确
user = authenticate(username=cd['username'],password=cd['password'])
print user
if user:
#实现用户登录,将用户信息保存到session中完成登录操作
login(request,user)
return HttpResponse('success')
return HttpResponse('failed')
def register(request):
if request.method == 'POST':
ac = Add_Clazz(request.POST)
astu = Add_Stu(request.POST)
if ac.is_valid() * astu.is_valid():
new_clazz = ac.save()
new_stu = astu.save(commit=False)
new_stu.clazz = new_clazz
new_stu.save()
return HttpResponse('successfully')
else:
return HttpResponse('sorry,you can not register.')
else:
ac = Add_Clazz()
astu = Add_Stu()
return render(request, 'register.html', {'ac': ac, 'astu': astu})前端页面

浏览器输入
http://127.0.0.1:8000/account/register/
测试结果数据库中新增了两条数据
表单校验
相关代码
urlpatterns = [
url(r'^login/$', views.login_view, name='login'),
url(r'^register/$', views.register),
url(r'^register_validate/$', views.register_validate)
]
Forms.py
class Add_Clazz(forms.ModelForm):
class Meta:
model = Clazz
fields = ('cname',)
class Add_Stu(forms.ModelForm):
password = forms.CharField(max_length=30,widget=forms.PasswordInput)
password2 = forms.CharField(max_length=30,widget=forms.PasswordInput)
class Meta:
model = Stu
fields = ('sname',)
def clean_password2(self):
cd = self.cleaned_data
if cd['password']!=cd['password2']:
self.errors['password2'] = ['密码不一致']
# raise forms.ValidationError('密码不一致!')
return cd['password2']Views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render
from .forms import *
from django.contrib.auth import authenticate,login
# Create your views here.
def login_view(request):
if request.method=='GET':
login_form = LoginForm()
return render(request,'login.html',{'login_form':login_form})
else:
login_form= LoginForm(request.POST)
#校验表单数据是否合法
if login_form.is_valid():
#以字典形式返回合法数据
cd = login_form.cleaned_data
print cd
#检验用户输入的用户和密码是否正确
user = authenticate(username=cd['username'],password=cd['password'])
print user
if user:
#实现用户登录,将用户信息保存到session中完成登录操作
login(request,user)
return HttpResponse('success')
return HttpResponse('failed')
def register(request):
if request.method == 'POST':
ac = Add_Clazz(request.POST)
astu = Add_Stu(request.POST)
if ac.is_valid() * astu.is_valid():
new_clazz = ac.save()
new_stu = astu.save(commit=False)
new_stu.clazz = new_clazz
new_stu.save()
return HttpResponse('successfully')
else:
return HttpResponse('sorry,you can not register.')
else:
ac = Add_Clazz()
astu = Add_Stu()
return render(request, 'register.html', {'ac': ac, 'astu': astu})
def register_validate(request):
if request.method == 'POST':
ac = Add_Clazz(request.POST)
astu = Add_Stu(request.POST)
if ac.is_valid() * astu.is_valid():
try:
new_clazz = Clazz.objects.get(cname=ac.cleaned_data['cname'])
except Clazz.DoesNotExist:
# 保存数据到数据库
new_clazz = ac.save()
# 保存数据对象不提交数据库
new_stu = astu.save(commit=False)
new_stu.clazz = new_clazz
new_stu.password = astu.clean_password2()
new_stu.save()
return HttpResponse('successfully')
else:
return render(request, 'register_validate.html', {'ac': ac, 'astu': astu})
else:
ac = Add_Clazz()
astu = Add_Stu()
return render(request, 'register_validate.html', {'ac': ac, 'astu': astu})
前端页

浏览器输入
http://127.0.0.1:8000/account/register_validate/
测试结果数据库中新增了两条数据

over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有