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

  • email_user(subj, msg)

给用户发送电子邮件,用 DEFAULT_FROM_EMAIL 的设 置作为发件人。也能够用第3个參数 from_email 来 覆盖设置。

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到此为止,用户的注冊和登录就能够在在浏览器上看到效果啦。

Window上python开发--4.Django的用户登录模块User的更多相关文章

  1. 项目开发-->身份认证及用户登录模块

    1.首先明确的两个问题 如何判断当前申请是由一个已登录用户发起的?如果Request.IsAuthenticated为true,则表示是一个已登录用户. 如何获取当前登录用户的登录名?如果是一个已登录 ...

  2. Window上python 开发--1.搭建开发环境

    事实上在开发python最好在ubuntu环境下,简单也便于扩展各个package.可是我的linux的电脑临时不在身边.还的我老婆的电脑win7没办法啊. 因为python的跨平台性.在window ...

  3. Windows上python开发--2安装django框架

    Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...

  4. unbuntu16.04上python开发环境搭建建议

    unbuntu16.04上python开发环境搭建建议  2017-12-20  10:39:27 推荐列表: pycharm: 可以自行破解,但是不推荐,另外也不稳定 pydev+eclipse: ...

  5. Django中用户权限模块

    Django中用户权限模块 1 auth模块 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系 ...

  6. Django:用户登录实例

    Django:用户登录实例 一.源代码 1,login.html代码(登录界面): <!DOCTYPE html> <html lang="zh-CN"> ...

  7. python入门:模拟简单用户登录(自写)

    #!/usr/bin/env python # -*- coding: utf-8 -*- #模拟简单用户登录(自写) import getpass a = raw_input("Pleas ...

  8. Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...

  9. Python开发【Django】:Model操作(二)

    Model操作 1.操作汇总: # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj ...

随机推荐

  1. PHP 笔记——String 字符串

    1. 定义 单引号括起来的字符串被原样输出. 双引号字符串中的变量被PHP解析为变量值. 2. 获取字符串长度 strlen(string $string): int 在utf-8下,汉字占3个字符, ...

  2. 2017-2018-1 JAVA实验站 冲刺 day05

    2017-2018-1 JAVA实验站 冲刺 day05 各个成员今日完成的任务 小组成员 今日工作 完成进度 张韵琪 进行工作总结 100% 齐力锋 找按钮音乐 100% 张浩林 写博客 100% ...

  3. PHPredis长连接pconnect

    1. 当使用pconnect时,连接会被重用,连接的生命周期是fpm进程的生命周期,而非一次php的执行. 疑惑1: fpm进程的生命周期是指 当前那个还是指所有:    php-fpm通常是1个ma ...

  4. 2015 UESTC 数据结构专题G题 秋实大哥去打工 单调栈

    秋实大哥去打工 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...

  5. Java--tomcat线程池(分析)

    以apache-tomcat-7.0.57 为例子 tomcat的默认配置如下: <Connector connectionTimeout="/> 默认的线程池为: maxThr ...

  6. Android中数据存储(三)——SQLite数据库存储数据

    当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...

  7. php获取开始与结束日期之间所有日期的方法

    /** * 获取指定日期段内每一天的日期 * @param Date $startdate 开始日期 * @param Date $enddate 结束日期 * @return Array */ fu ...

  8. Spring通过Gmail SMTP服务器MailSender发送电子邮件

    Spring提供了一个有用的“org.springframework.mail.javamail.JavaMailSenderImpl”类,通过JavaMail API 简化邮件发送过程.这里有一个项 ...

  9. Spring JdbcTemplate+JdbcDaoSupport实例

    在Spring JDBC开发中,可以使用 JdbcTemplate 和 JdbcDaoSupport 类来简化整个数据库的操作过程. 在本教程中,我们将重复上一篇文章Spring+JDBC例子,看之前 ...

  10. 插值技术之Bezier插值(1) -- Bezier Curve

    作者:i_dovelemon 来源:CSDN 日期:2015 / 7 / 11 主题:Interpolate,Bezier Curve 引言 在游戏开发中.诸如动画系统.路径计算等等操作,都会遇到对数 ...