Django小白教程之Django用户注册与登录


Posted in Python onApril 22, 2016

 Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站!

学习django学得超级吃力,最近弄个最简单的用户登录与注册界面都是那么难,目前算是基本实现了,虽然功能特别特别简单但是做一个记录,以后学习深入了再来补充:

首先创建项目,到项目所在目录:django-admin startproject demo0414_userauth

进入项目:cd demo0414_userauth

创建相应的app:django-admin startapp account

整个项目的结构图如图所示

├── account
│ ├── admin.py
│ ├── admin.pyc
│ ├── apps.py
│ ├── init.py
│ ├── init.pyc
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0001_initial.pyc
│ │ ├── init.py
│ │ └── init.pyc
│ ├── models.py
│ ├── models.pyc
│ ├── tests.py
│ ├── urls.py
│ ├── urls.pyc
│ ├── views.py
│ └── views.pyc
├── demo0414_userauth
│ ├── init.py
│ ├── init.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ ├── urls.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── manage.py
└── templates
├── register.html
├── success.html
└── userlogin.html

4 directories, 29 files

然后在setting文件的installed_app中添加app account;

Django小白教程之Django用户注册与登录 

创建一个templates文件夹,可以放在项目的根目录下也可以放在app的目录下。一般情况下提倡放在app的目录下。如果放下项目的根目录下需要在setting文件中TEMPLATES中设置'DIRS': [os.path.join(BASE_DIR,'templates')],否则不能使用模板。

Django小白教程之Django用户注册与登录 

另外因为这个项目存在页面跳转的问题,为了安全防止csrf攻击,一把模板中都有了相关的设置。目前我还不会用这个东西,据说在form表单中添加标签{% csrf_token %}就可以实现了,但是我没有成功。所以先不考虑这个问题,把seeting中的这个中间件'django.middleware.csrf.CsrfViewMiddleware',注释掉

Django小白教程之Django用户注册与登录 

然后在model中创建相应的数据库:

class User(models.Model):
 username = models.CharField(max_length=50)
 password = models.CharField(max_length=50)
 email = models.EmailField()

view中添加相应的程序。Pdb当时用于断点调试,我很喜欢,超级喜欢。如果你不敢兴趣,直接注释即可。

#coding=utf-8
from django.shortcuts import render,render_to_response
from django import forms
from django.http import HttpResponse,HttpResponseRedirect
from django.template import RequestContext
from django.contrib import auth
from models import User

import pdb

def login(request): 
 if request.method == "POST":
  uf = UserFormLogin(request.POST)
  if uf.is_valid():
   #获取表单信息
   username = uf.cleaned_data['username']
   password = uf.cleaned_data['password']   
   userResult = User.objects.filter(username=username,password=password)
   #pdb.set_trace()
   if (len(userResult)>0):
    return render_to_response('success.html',{'operation':"登录"})
   else:
    return HttpResponse("该用户不存在")
 else:
  uf = UserFormLogin()
return render_to_response("userlogin.html",{'uf':uf})
def register(request):
 curtime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime());
 if request.method == "POST":
  uf = UserForm(request.POST)
  if uf.is_valid():
   #获取表单信息
   username = uf.cleaned_data['username']
   #pdb.set_trace()
   #try:
   filterResult = User.objects.filter(username = username)
   if len(filterResult)>0:
    return render_to_response('register.html',{"errors":"用户名已存在"})
   else:
    password1 = uf.cleaned_data['password1']
    password2 = uf.cleaned_data['password2']
    errors = []
    if (password2 != password1):
     errors.append("两次输入的密码不一致!")
     return render_to_response('register.html',{'errors':errors})
     #return HttpResponse('两次输入的密码不一致!,请重新输入密码')
    password = password2
    email = uf.cleaned_data['email']
   #将表单写入数据库
    user = User.objects.create(username=username,password=password1)
    #user = User(username=username,password=password,email=email)
    user.save()
    pdb.set_trace()
   #返回注册成功页面
    return render_to_response('success.html',{'username':username,'operation':"注册"})
 else:
  uf = UserForm()
return render_to_response('register.html',{'uf':uf})
class UserForm(forms.Form):
 username = forms.CharField(label='用户名',max_length=100)
 password1 = forms.CharField(label='密码',widget=forms.PasswordInput())
 password2 = forms.CharField(label='确认密码',widget=forms.PasswordInput())
 email = forms.EmailField(label='电子邮件')
class UserFormLogin(forms.Form):
 username = forms.CharField(label='用户名',max_length=100)
 password = forms.CharField(label='密码',widget=forms.PasswordInput())

Tempaltes文件夹下总共有3个页面:

Register.html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title>用户注册</title>
</head>
 <style type="text/css">
 body{color:#efd;background:#453;padding:0 5em;margin:0}
 h1{padding:2em 1em;background:#675}
 h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
 p{margin:1em 0}
 </style>
<body>
<h1>注册页面:</h1>
<form method = 'post' enctype="multipart/form-data">
{{uf.as_p}}
{{errors}}
</br>
<input type="submit" value = "ok" />
</form>
</body>
</html>

Userlogin.html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title>用户注册</title>
</head>
 <style type="text/css">
 body{color:#efd;background:#453;padding:0 5em;margin:0}
 h1{padding:2em 1em;background:#675}
 h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
 p{margin:1em 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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title></title>
</head>
<body>
<form method = 'post'>
 <h1>恭喜,{{operation}}成功!</h1>
</form>
</body>
</html>

更新数据库:

Django小白教程之Django用户注册与登录 

运行服务器:

Django小白教程之Django用户注册与登录 

注册页面:

Django小白教程之Django用户注册与登录 

如果注册的用户没有注册过,则能注册成功点击OK进入success界面

登录页面:

Django小白教程之Django用户注册与登录 

点击OK就能进入到success页面

关于Django用户注册与登录教程就给大家介绍完了,希望对大家有所帮助!

Python 相关文章推荐
python发腾讯微博代码分享
Jan 10 Python
使用python装饰器验证配置文件示例
Feb 24 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 Python
Python基础教程之利用期物处理并发
Mar 29 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
Python语言异常处理测试过程解析
Jan 08 Python
python 实现两个线程交替执行
May 02 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
python中PIL安装简单教程
Apr 21 #Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 #Python
Python for Informatics 第11章之正则表达式(二)
Apr 21 #Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 #Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 #Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 #Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 #Python
You might like
php URL跳转代码 减少外链
2011/06/25 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
python-opencv颜色提取分割方法
2018/12/08 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python根据服务获取端口号的方法
2019/09/25 Python
python实现的汉诺塔算法示例
2019/10/23 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
园长自我鉴定
2013/10/06 职场文书
公关关系专员的自我评价分享
2013/11/20 职场文书
综合实践教学反思
2014/01/31 职场文书
安全生产先进个人材料
2014/02/06 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
长城导游词400字
2015/01/30 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
vue实现列表垂直无缝滚动
2022/04/08 Vue.js