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 3.6 +pyMysql 操作mysql数据库(实例讲解)
Dec 20 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
Python中 map()函数的用法详解
Jul 10 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
python匹配两个短语之间的字符实例
Dec 25 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
python识别图像并提取文字的实现方法
Jun 28 Python
python 实现在一张图中绘制一个小的子图方法
Jul 07 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
用python批量解压带密码的压缩包
May 31 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自定义函数返回多个值
2006/11/26 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
JS backgroundImage控制
2009/05/19 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
解析Python中的二进制位运算符
2015/05/13 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
python:print格式化输出到文件的实例
2018/05/14 Python
想学画画?python满足你!
2020/12/24 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
实体的生命周期
2013/08/31 面试题
优秀应届生推荐信
2013/11/09 职场文书
口腔医学技术应届生求职信
2013/11/09 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
学习型班组申报材料
2014/05/31 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS