DjangoWeb: 快速实现注册登录
1.首先在Models创建用户表(设计数据库) 然后同步数据库
class User(models.Model): username=models.CharField(max_length=50) password=models.CharField(max_length=50) email=models.EmailField()
2.创建视图(逻辑层)
打开view文件在view中创建表单和view层方法
#创建表单 from django import forms from models import User class UserForm(forms.Form): username=forms.CharField(label='用户名:',max_length=100) password=forms.CharField(label='密码:',widget=forms.PasswordInput()) email=forms.EmailField(label='电子邮件:') #Create your views here def register(request): if request.method=='POST': uf=UserForm(request.POST) if uf.is_valid(): #获取表单信息 username=uf.cleaned_data['username'] password=uf.cleaned_data['password'] email=uf.cleaned_data['email'] #将表单写入数据库 user=User() user.username=username user.password=password user.email=email user.save() return render_to_response('success.html',{'username':username}) else: uf=UserForm() return render_to_response('register.html',{'uf':uf})
在这个逻辑中主要做了几件事情,首页提供给用户一个注册的页面(register.html)UserForm类定义了表单在注册页面上的显示。接受用户填写的表单信息,然后将表单信息写入数据库,最后返回给用户一个注册成功的页面(success.html)
3.创建前端页面(创建模板页面)
register.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>用户注册</title> </head> <style type="text/css"> body{color:#efd; background:#435; padding:0 5em; margin:0} h1{padding:2em lem; background:#675} h2{color:#bf8; border-top:lpx dotted #fff; margin-top:2em} p{margin: lem 0} </style> <body> <h1>注册页面:</h1> <form method='post' enctype="multipart/form-data"> {{ uf.as_p }} <input type="submit" value="ok"/> </form> </body> </html>
success.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> </head> <body> <h1>恭喜{{username}},注册成功!</h1> </body> </html>
4.设置模版路径
5.设置URL
遇到的问题,在注册界面进去之后出现类这样的问题:
Forbidden (403) CSRF verification failed. Request aborted. Help Reason given for failure: CSRF token missing or incorrect. In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure: Your browser is accepting cookies. The view function uses RequestContext for the template, instead of Context. In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data. You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed. You can customize this page using the CSRF_FAILURE_VIEW setting.
解决办法:http://www.xiaomastack.com/2014/08/04/djangoformerr/
感谢这位大哥详细清晰的解答!!
6.体验注册
--------------------------------------------------------------------------
再写一个登录的
设用户登录的表单,方法和 前端模版
# 登录 #定义表单类型 class UserLoginForm(forms.Form): username=forms.CharField(label='用户名',max_length=100) password=forms.CharField(label='密码',widget=forms.PasswordInput()) #登录login def login(request): if request.method=='POST': print("post") uf=UserLoginForm(request.POST) if uf.is_valid(): #获取表单信息 username=uf.cleaned_data['username'] password=uf.cleaned_data['password'] #获得的表单和数据库比较 try: user=User.objects.get(username=username,password=password) print("canget") return render_to_response('success.html',{'username':username}) except ObjectDoesNotExist: return HttpResponseRedirect('/login/',{'uf':uf},context_instance=RequestContext(request)) else: print("login") uf=UserLoginForm() return render_to_response('login.html',{'uf':uf},context_instance=RequestContext(request))
设计表单的前端模板
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>登录</title> </head> <style type="text/css"> body{color:#efd; background:#435; padding:0 5em; margin:0} h1{padding:2em lem; background:#675} h2{color:#bf8; border-top:lpx dotted #fff; margin-top:2em} p{margin: lem 0} </style> <body> <h1>登录页面:</h1> <form method='post' enctype="multipart/form-data"> {% csrf_token %} {{ uf.as_p }} <input type="submit" value="ok"/> </form> </body> </html>
最后设置路径/配置URL/就OK拉拉
http://www.xiaomastack.com/2014/08/04/djangoformerr/