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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
Python中使用item()方法遍历字典的例子
Aug 26 Python
Python中的对象,方法,类,实例,函数用法分析
Jan 15 Python
Mac 上切换Python多版本
Jun 17 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
PyQt5 多窗口连接实例
Jun 19 Python
flask 实现token机制的示例代码
Nov 07 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
Python中Subprocess的不同函数解析
Dec 10 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
python中函数返回多个结果的实例方法
Dec 16 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邮件类
2007/01/03 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
机械制造毕业生求职信
2014/03/03 职场文书
本科生就业推荐信
2014/05/19 职场文书
法制宣传口号
2014/06/16 职场文书
医院义诊活动总结
2014/07/04 职场文书
具结保证书范本
2015/05/11 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server
详解SQL的窗口函数
2022/04/21 Oracle
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript