学生登录
概述
表单既可以在模板页面利用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晓码阁 版权所有