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

来源:互联网 发布:mysql 更新字段加一 编辑:程序博客网 时间:2024/05/17 06:32

一、概述

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 Useruser = User.objects.create_user('BeginMan','abcd123','beginman@gmail.com')print user.is_staff #Trueuser.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 authenticateuser=authenticate(username='john',password='secret')ifuserisnotNone:print"用户名、密码正确!"else:print"用户名、密码错误!"

login():登录函数

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

from django.contrib.auth import authenticate, logindef 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_requireddef 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'的组,你可以写代码来让他们访问网站的会员专区或者发送给他们会员专用的电子邮件。

十、消息

this

十一、小结

看了这份文档已经有两天了,有三点感受:
1、英语水平着实太差,很多句子晦涩难懂,导致自己翻译的背离作者原意。
2、一味的看文档不是一个好方法,最好也看看别人的代码,然后自己实践总结
3、做事情要专一,不能分散力量,否则事倍功半的。

下一步:

1、扩展User表
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 天猫买东西地址写错了怎么办 天猫上买衣服收货电话写错了怎么办 电视遥控器不小心按了高清键怎么办 康佳电视打开右下角是红色的怎么办 天猫超市退款成功后收到货怎么办 天猫还没收到货就确认收货了怎么办 支付宝红包抵扣被关了怎么办 水貂绒大衣白色过色了怎么办 双面羊绒大衣袖子洗短了怎么办 特殊类型订单销量评价删除后怎么办 淘宝上卖家发货发错了地址怎么办 买完保险想换保险代理人怎么办 怀孕内裤两边磨的好疼怎么办 露肩连体裤穿着卡裆怎么办 魅族手机恋与制作人换诺基亚怎么办 蚊子叮咬后擦风油精了红肿怎么办 机动车已转让没过户出了事情怎么办 签好的合同如果甲方违约怎么办? 饭店没签合同辞职不给工资怎么办 两家为了带孩子闹翻了怎么办啊? 抵押后租赁的房屋被法院拍卖怎么办 房子买20年了没有过户怎么办 二手车没过户行驶证丢了怎么办 买的二手车行驶证丢了怎么办 在京东仓库做事把东西损坏了怎么办 微信显示该账号登陆环境异常怎么办 干洗店把衣服洗坏了怎么办 千牛上怎么改淘宝密码忘记了怎么办 公司收了代理商押金到期不退怎么办 淘宝显示签收但是我没收到货怎么办 淘宝东西没收到显示签收了怎么办 开拼多多店铺的密码忘了怎么办 拼多多密码跟店铺名忘了怎么办 闲鱼上卖出的宝贝被调包了怎么办 上传身份证照片说格式错误该怎么办 我给厂里打的款不给发货怎么办 净值接近不定期份额折算阀值怎么办 有锁电信4g掉了怎么办 在电脑中找不到想作废的发票怎么办 科目三补考费发票丢了怎么办 母婴店飞鹤奶粉突然厂家撤货怎么办