Window上python开发--4.Django的用户登录模块User
Android系统开发交流群:484966421 OSHome。
微信公众号:oshome2015
在搭建站点和web的应用程序时,用户的登录和管理是差点儿是每一个站点都必备的。
今天主要从一个实例了解下面django本身自带的user模块。
本文并不正确user进行扩展。
主要使用原生的模块。
1.User模块基础:
在使用user 之前先import到自己的iew中。相当与我们自己写好的models。仅仅只是这个是系统提供的models。
from django.contrib.auth.models import User # 导入user模块
1.1User对象属性
User 对象属性:username。 password(必填项)password用哈希算法保存到数据库
email,last_login,date_joined(字面意思就知道了)
is_staff ; 用户是否拥有站点的管理权限.
is_active : 是否同意用户登录, 设置为``False``,能够不用删除用户来禁止 用户登录
1.2User 对象方法
is_authenticated(): 假设是真正的 User 对象。返回值恒为 True 。 用于检查用户是否已经通过了认证。
通过认证并不意味着 用户拥有不论什么权限,甚至也不检查该用户是否处于激活状 态。这仅仅是表明用户成功的通过了认证。
这种方法非常重要, 在后台用request.user.is_authenticated()推断用户是否已经登录,假设true则能够向前台展示request.user.name
:set_password(passwd)
这种方法是用来更改password的,先用user=User.objects.get(username='')
user.set_password(passeord='')
user.save
check_password(passwd)
用户须要改动password的时候 首先要让他输入原来的password 。假设给定的字符串通过了password检查,返回 True
给用户发送电子邮件,用 DEFAULT_FROM_EMAIL 的设 置作为发件人。也能够用第3个參数 from_email 来 覆盖设置。
email_user(subj, msg)
1.3;创建User用户
使用 create_user 辅助函数创建用户:
from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email='')
user.save 注意这里不是save()。
1.4. 登录和认证
Django 在 django.contrib.auth 中提供了两个函数来处理这些事情—— authenticate() 和 login()
authenticate(): 认证给出的username和password。使用 authenticate() 函数。它接受两个參数,username username 和 password password ,并在password对用给出的username是合法的情况下返回一个 User 对象。当给出的password不合法的时候 authenticate() 函数返回 None
login() :该函数接受一个 HttpRequest 对象和一个 User 对象作为參数并使用Django的会话( session )框架把用户的ID保存在该会话中
from django.contrib import auth
user = auth.authenticate(username=username, password=password)
if user:
auth.login(request, user)
1.5.注销和重定向
注销 logout()该函数接受一个 HttpRequest 对象作为參数。没有返回值
auth.logout(request)重定向:HttpResponseRedirect()该函数主要实现,url的重定向。
在我们登录和注销后,重定向到指定url。该函数能够採用url的硬编码。
return HttpResponseRedirect('/sbook/sb_show')
2.实现用户注冊和登录
通过上面的基础知识,我们已经了解怎样创建和更新一个user啦。接下来用一个实例来做一下用户的注冊和登录。
案子mvc的模型。系统已经提供了model,所以我们要做的仅仅须要实现iew和template即可了。在view.py 中实现对注冊和登录的控制。
先看下面view中的代码
def alogin(request): errors= [] account=None password=None if request.method == 'POST' : if not request.POST.get('account'): errors.append('Please Enter account') else: account = request.POST.get('account') if not request.POST.get('password'): errors.append('Please Enter password') else: password= request.POST.get('password') if account is not None and password is not None : user = authenticate(username=account,password=password) if user is not None: if user.is_active: login(request,user) return HttpResponseRedirect('/index') else: errors.append('disabled account') else : errors.append('invaild user') return render_to_response('account/login.html', {'errors': errors}) def register(request): errors= [] account=None password=None password2=None email=None CompareFlag=False if request.method == 'POST': if not request.POST.get('account'): errors.append('Please Enter account') else: account = request.POST.get('account') if not request.POST.get('password'): errors.append('Please Enter password') else: password= request.POST.get('password') if not request.POST.get('password2'): errors.append('Please Enter password2') else: password2= request.POST.get('password2') if not request.POST.get('email'): errors.append('Please Enter email') else: email= request.POST.get('email') if password is not None and password2 is not None: if password == password2: CompareFlag = True else : errors.append('password2 is diff password ') if account is not None and password is not None and password2 is not None and email is not None and CompareFlag : user=User.objects.create_user(account,email,password) user.is_active=True user.save return HttpResponseRedirect('/account/login') return render_to_response('account/register.html', {'errors': errors}) def alogout(request): logout(request) return HttpResponseRedirect('/index')
从以上的代码中。我们是在template里创建的form。
在templates下创建account文件夹。在以下创建login.html
<!DOCTYPE html> <html> <head> <title>Welcome login </title> </head> <body> <p>Account Login </p> {% if errors %} <li> {% for error in errors %} <p style="color: red;"> Please correct the error: {{error}} below. </p> {% endfor %} </li> {% endif %} <form action="" method="post"> <input type = 'text' placeholder="Please input account" name="account"> <br> <input type = 'password' placeholder="Please input password" name="password"> <br> <input type = 'submit' placeholder="Login" value="Login"> <br> <a href="/account/register">register new accout</a> </form> </body> </html>相同的方式创建register.html
<html> <head> <title>Welcome Register New Account</title> </head> <body> {% if errors %} <li> {% for error in errors %} <p style="color: red;"> Please correct the error: {{error}} below. </p> {% endfor %} </li> {% endif %} <table> <form action="" method="post"> <tr> <td> <label >Account:</label> </td> <td> <input type = 'text' placeholder="Please input account" name = 'account'> </td> </tr> <tr> <td> <label >Password:</label> </td> <td> <input type = 'password' placeholder="Please input password" name = 'password'> </td> </tr> <tr> <td> <label >Password:</label> </td> <td> <input type = 'password' placeholder="Please input password" name ='password2'> </td> </tr> <tr> <td> <label>email:</label> </td> <td> <input type="email" placeholder="Please input email" name = 'email'> </td> </tr> <tr> <td> <input type = 'submit' placeholder="Login" value="Login"> </td> </tr> </form> </table> </body> </html>接下来view和template创建好了。仅仅有床urls的映射关系啦。
url(r'^account/login/$', alogin), url(r'^account/register/$', register), url(r'^account/logout/$', alogout),ok到此为止,用户的注冊和登录就能够在在浏览器上看到效果啦。
相关文章
- Python进阶34-Django 中间件
- Python获取时间戳_python爬虫时间戳
- python win32api messagebox_如何在Python中使用Win32 API?
- pycharm打包python项目_Python怎么打包
- Python "爬虫"出发前的装备之二数据先行( Requests 模块)
- Python爬虫实战——搭建自己的IP代理池[通俗易懂]
- python编程前景_Python前景如何,学完后可以从事方向?
- python的random()函数用法_Python随机函数random用法示例
- python解压bz2文件命令,在Python中解压缩.bz2文件
- python hashlib_Python hashlib模块实例使用详解
- 【说站】python Series如何进行相加
- Python函数式编程:返回函数与匿名函数
- Python 反转字符串_python输出字符串
- python django 数据库_Apache+Mysql+PHP/Python简单项目
- python hexdump_笨办法学 Python · 续 练习 26:`hexdump`
- 【Django】在大型项目中的django的性能模型字段primary_key
- 【7】python_matplotlib 输出(保存)矢量图方法;画图时图例说明(legend)放到图像外侧;Python_matplotlib图例放在外侧保存时显示不完整问题解决
- Django+Celery学习笔记4——django+celery+redis周期任务Crontabs设置
- Python之Phantomjs无界面浏览器
- python爬取去哪儿出境游攻略
- 性能最快的代码分析工具,Ruff 正在席卷 Python 圈!
- Python实战之MySQL数据库操作详解编程语言
- 如何在 Python Web 框架 Django 中使用序列化器
- 深入浅出Django与MSSQL整合(django-mssql)
- 在Python中简单调用MySQL(python调用mysql)