django 注册、登录及第三方接口程序(1):基础知识

一、概述

django有一套成型的注册登录模块,auth 系统包含如下:

Users
Permission
Group
Message

在settings.py配置中,少不了以下配置

MIDDLEWARE_CLASSES = (
‘django.middleware.common.CommonMiddleware‘,
‘django.contrib.sessions.middleware.SessionMiddleware‘,
‘django.contrib.auth.middleware.AuthenticationMiddleware‘,
‘django.contrib.messages.middleware.MessageMiddleware‘,
)

INSTALLED_APPS = (
‘django.contrib.auth‘,
‘django.contrib.contenttypes‘,
‘django.contrib.sessions‘,
‘django.contrib.sites‘,
‘django.contrib.messages‘,
)

这些一般在创建django项目自动生成,运行 manage.py syncdb则生成相应的表。

二、Users

字段
class models.User
User对象的具体字段参考:django官网文档
这里注意is_active意思是:是否为活跃用户,对于删除用户尽量设置其为false而非真正的删除,同时也作为是否可登录的判定。
方法
更多参考django官网文档
这里指出几个重点学习。
1、is_anonymous():区别匿名用户和可登录用户的方法,往往使用is_authenticated()
2、is_authenticated():authenticated表示已验证,那么这个方法就是它只表明用户提供一个有效的用户名和密码。
3、set_password(raw_password):更改密码,并自动处理hash值
4、check_password(raw_password):检测密码是否正确

三、管理方法(Manager functions)

class models.UserManager
1、create_user(username, email, password=None):创建、保存并返回一个User,username,email和password被设置为给定的值,并且User设置了is_active=True.
2、make_random_password():
返回给定值和长度的随机密码:

make_random_password(length=10,allowed_chars=‘abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789‘)

四、基本用法

1、创建用户
使用create_user()来创建用户,如下:

from django.contrib.auth.models import User
user = User.objects.create_user(‘BeginMan‘,‘abcd123‘,‘[email protected].com‘)
print user.is_staff #True
user.save()

2、更改密码
使用set_password()进行更改

>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username__exact=‘john‘)
>>> u.set_password(‘new password‘)
>>> u.save()

五、web请求中的认证

详细内容参考
1、基本概述

首先,安装SessionMiddleware和AuthenticationMiddleware中间件。把他们加入到MIDDLEWARECLASSES设置中即可。当你安装好这些中间件之后,你就可以在视图(view)中访问request.user了。request.user将返回当前登录的用户的一个User对象。如果当前没有用户登录,那么request.user将返回一个AnonymousUser对象的实例。你可以通过isauthenticated()来判断是否有用户登录,如下:

if request.user.is_authenticated():
 #已登录用户
else:
 #匿名用户

2、用户登录
Django在django.contrib.auth提供了2个函数:authenticate()login()
authenticate():认证函数:

如果通过给定的用户名和密码做认证,请使用authenticate()函数。他接收2个参数,一个是username一个是password。如果认证成功,它返回一个User对象。如果密码无效,它返回一个None。例如:

from django.contrib.auth import authenticate
user=authenticate(username=‘john‘,password=‘secret‘)ifuserisnotNone:
print"用户名、密码正确!"else:
print"用户名、密码错误!"

login():登录函数

在视图中登录一个用户的话,使用login()函数。它接收HttpRequest对象和一个User对象。login()通过Django的session框架把用户的ID保存到session中。

from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST[‘username‘]
    password = request.POST[‘password‘]
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
        else:
            # Return a ‘disabled account‘ error message
    else:
        # Return an ‘invalid login‘ error message.

3、用户登出
要登出使用
django.contrib.auth.login()登录的用户的话,可以在视图中使用
django.contrib.auth.logout()。它接收一个HttpRequest参数,没有返回值。例如:

from django.contrib.auth import logout
def logout_view(request):
    logout(request)
    #转到成功页面

请注意:如果用户没有登录的话,logout()也不会抛出任何异常的。

六、限制用户的访问

1、原始方法
原始方法就是重定向
如:if not request.user.is_authenticated():
2、使用login_required()修饰器

decorators.loginrequired([redirectfieldname=REDIRECTFIELD_NAME])
程序如下:

from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
   ...

login_required()原理:

如果用户尚未登录,重定向到settings.LOGIN_URL。
如果用户已经登录则正常执行。

3、已登录用户通过通行测试(passtest)来限制访问
详见官方文档

七、权限(Permissions)

Django自带了一个简单的权限系统。它为向用户和用户组付权限提供了一个途径。它被用在了Django的admin站点中,当然你也可以把它用在自己的代码中。Django的admin站点是这样应用权限的:
通过"add"权限来控制用户是否可以访问添加表单并添加一个指定类型的对象。通过"change"权限来控制用户是否可以访问指定类型对象的列表和修改表单。*通过"delete"权限来控制用户是否可以删除指定类型的对象。
权限被赋予每种类型的对象,而不是对象的特定的实例。你可以说“玛丽可以修改新的故事(stories)”,但是你不能说“玛丽可以修改她创建的新的故事”或者“玛丽只能修改特定状态的、特定发布时间的、特定ID的故事等等”。这些功能目前Django的开发人员还在讨论之中。

1、默认权限
3个基本的权限--添加(add),创建(create)和删除(delete)--在创建包含有classAdmin的Django模型的时候都自动被创建好了。在表面现象的后面,当你运行manage.pysyncdb的时候,这些权限被添加到了auth_permission数据表中。
请注意,如果你的模型里没有classAdmin的话,当你运行manage.pysyncdb的时候这些权限不会被创建出来。如果你初始化数据库之后还想添加这些权限,可以在模型中加入class Admin然后再运行一次manage.pysyncdb。
2、自定义权限
为了给指定的模型自定义权限,可以使用权限(permissions)的modelMetaattribute。这个例子创建了3个自定义的权限。

class Task(models.Model):
    ...
    class Meta:
        permissions = (
            ("can_view", "Can see available tasks"),
            ("can_change_status", "Can change the status of tasks"),
            ("can_close", "Can remove a task by setting its status as closed"),
        )

接下来的事情就是运行syncdb来创建这些权限。
3、Permission的API

name:必须。小于等于50个字符。例如:‘Canvote‘。
contenttype:必须。引用自djangocontenttype数据表,它包含了已经安装的
Django模型的类型。
codename:必须。小于等于100个字符。例如:‘can
vote‘

八、模版中的认证数据

如果使用RequestContext的话,已经登录的用户的user和权限对象就会保存在template context中。
1、用户(Users)
当前登录的用户,不管是否是匿名的还是其他的,都存储在模版变量{{user}}中。如:

{%ifuser.is_authenticated%}
  <p>欢迎,{{user.username}}。谢谢您的来访。</p>
{%else%}
  <p>欢迎,请登录。</p>
{%endif%}

2、权限(Permissions)
当前登录用户的权限存储在模版变量{{perms}}中,是django.core.context_processors_PermWrapper的实例。
在{{perms}}对象中,单个属性的查找是使用User.hasmoduleperms的。下面这个例子中,如果用户对foo这个app有任何权限的话,它就返回True。{{perms.foo}}
二级属性查找是使用User.hasperm。下面这个例子中,如果用户有foo.canvote权限的话,它就返回True。{{perms.foo.can_vote}}因此,你可以在模板中用{%if%}语句来判断权限

{%ifperms.foo%}
<p>你有操作foo的权限。</p>{%ifperms.foo.can_vote%}
<p>你可以投票。</p>{%endif%}
{%ifperms.foo.can_drive%}<p>你可以开车。</p>{%endif%}{%else%}
<p>你没有操作foo的权限。</p>
{%endif%}

九、组(Groups)

组通常用来归类用户,这样你就可以为这些组里面的用户应用权限或者贴其他的标签。一个用户可以属于任意数量的组。
组中的用户自动获得赋予组的权限。例如,如果组Siteeditors有canedithome_page的权限,那么任何加入这个组的用户都自动拥有这个权限。
组也是归类用户并给他们贴标签或扩展功能的一个方便的途径。例如,你创建一个‘Specialusers‘的组,你可以写代码来让他们访问网站的会员专区或者发送给他们会员专用的电子邮件。

时间: 2024-08-01 10:19:04

django 注册、登录及第三方接口程序(1):基础知识的相关文章

django 注册、登录及第三方接口程序(4):扩展邮箱注册,登录,微博登录

1.邮箱注册 这里需要扩展User,两种解决办法,1,注册时将email字段内容赋给username,这种瞒天过海型的,另一种就是扩展user,这里介绍django1.5的扩展方法. 1.setting配置 AUTH_USER_MODEL = 'manager.MyUser' # 扩展表的位置,appname.Model, MyUser是manager app下models中的用户类 AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends

如何本地测试例如QQ登录等第三方接口

前言:现在基本是个网站就会集成第三方的一些接口,比如QQ登录.分享等等.但是在开发的时候,尤其是没有这方面经验的开发人员来说,调试流程时会显得迷茫,不知道怎么调试.这里就个人的这方面学习摸索做一个总结. 如题,本篇只是总结 如何本地测试例如QQ登录等第三方接口. 特别说明:1.本文以集成QQ登录接口为例.2.因为是NET程序猿,所以以VS举例说明 关于如何成为QQ开发者,如何申请AppID以及AppKey,不再赘述!百度百科上都有了,还说什么呢!呵呵~ 关于如何集成,这个官网上都有各种SDK,而

嵌入式中烧写程序的基础知识有哪些

在嵌入式的基础知识学习中,烧写程序是必备的知识点之一,需要把写的程序代码烧写到单片机上,在单片机上检验写的程序代码是否正确,是否能够正常运行,下面我们来学习下什么是烧写和固件.常见的几种烧写方式.三种编程方式的区别. 简单整理下固件.烧写的定义以及烧写过程的几种方式. 一.什么是烧写(下载)和固件 嵌入式系统需要预先将程序写入ROM/FLASH中,在启动时载入运行这些程序,将已经生成的程序写入ROM/FLASH的过程叫做烧写.这样固化在存储介质上的文件叫固件(firmware).那么烧写即为更新

程序语言基础知识总结

语言实现了人与人之间的沟通,那么人与电脑之间怎么沟通呢?当然也是语言,它是程序语言.计算机是01的世界,通过程序语言,把人类的大千世界语计算机融合在了一起,amazing. 机器语言由01组成,直接用机器语言可读性差,难以理解,由此逐渐产生了汇编语言和高级语言.程序设计语言面向人,人们用它写出源程序,目标程序面向机器,语言处理程序充当翻译的角色,联通了人与机器. 语言程序是如何将源程序变为目标程序呢?下面是理论支持 文法和语言的形式描述: 上面导图是理论依据,下面是程序语言的大概构架 程序语言基

微信小程序开发基础知识总结

微信小程序在无论在功能.文档及相关支持方面,都是优于前面几种微信账号类型,它提供了很多原生程序才有的接口,使得我们的小程序在很多方面突破H5页面应用的限制,更加接近原生程序的功能,因此微信小程序具有很大的前景想象力.它提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以让开发者可以方便的聚焦于数据与逻辑上. 1.小程序的目录结构 小程序的目录结构如下所示. 其中项目级别的的文件包括 app.js.ap

用Swing开发GUI程序(基础知识)

GUI(Graphics User Interface)图形用户界面,可以让用户看着界面操作,所以要比控制台程序更加直观,可以提供更加丰富的功能. 在Java中,GUI操作的支持API,一般保存在java.awt和javax.swing包中,但一般情况我们选择javax.swing,因为Swing界面开发API的功能比AWT更加强大. 一.使用窗口 (一)用JFrame类开发窗口 一般情况下使用javax.swing.JFrame类来进行窗口显示,JFrame常见的构造函数为: public J

二、程序语言基础知识

1.语言概述 基本概念 机器指令程序,最基本的计算机语言,二进制的机器指令序列: 汇编语言,书写格式取决于特定计算机的机器指令. 以上皆是低级语言,面向机器的语言. 高级语言:不依赖于机器硬件的程序语言.如:java.c.c++.php.python…… 语言处理程序:将高级语言或汇编语言翻译为机器语言. 方式分为:汇编.解释.翻译    源程序 解释程序:即解释器,将源程序翻译为中间代码 编译程序:即编译器,将源程序翻译成目标语言程序 区别:解释器,不生成独立的目标程序,解释程序和源程序(或其

.net窗体程序的基础知识及详细笔记

第一章:初识Windows程序 1.1:第一个wondows程序 1.1.1:认识windows程序 Form1.cs:窗体文件:程序对窗体编写的代码一般都存放在这个文件(还有拖动控件时的操作和布局,还有设置一般的属性)      F4:跳到设置属性的界面  F7:跳到逻辑代码文件 From.Designer.cs:窗体设计文件:一般拖动控件自动生成的文件(很少修改) From.resx:资源文件:配置图片等资源. Program.cs: 主程序文件:包含main方法的程序入口,如果要改执行的窗

MVC入门学习笔记(一)第一个MVC应用程序(基础知识)

下载了并安装Visual Studio Ultimate 2013 RC 和 MS SQL Server 2014.使用最新版本,可以了解和学习到最新技术. 去微软官方网站,学习MVC相关的教程:http://www.asp.net/mvc 去听微软官方网站推荐的MVC视频,虽然是英语授课,看操作即可......http://pluralsight.com/training/Player?author=scott-allen&name=mvc4-building-m1-intro&mode