已经登陆过了,但是django用户注册系统还是显示为匿名用户

django学习|LOFTER(乐乎) - 记录生活,发现同好
LOFTER for ipad —— 记录生活,发现同好
&nbsp&nbsp被喜欢
&nbsp&nbsp被喜欢
{list posts as post}
{if post.type==1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type==2}
{if post.type == 3}
{if !!post.image}
{if post.type == 4}
{if !!post.image}
{if !!photo.labels && photo.labels.length>0}
{var wrapwidth = photo.ow < 500?photo.ow:500}
{list photo.labels as labs}
{var lbtxtwidth = Math.floor(wrapwidth*(labs.ort==1?labs.x:(100-labs.x))/100)-62}
{if lbtxtwidth>12}
{if !!labs.icon}
{list photos as photo}
{if photo_index==0}{break}{/if}
品牌${make||'-'}
型号${model||'-'}
焦距${focalLength||'-'}
光圈${apertureValue||'-'}
快门速度${exposureTime||'-'}
ISO${isoSpeedRatings||'-'}
曝光补偿${exposureBiasValue||'-'}
镜头${lens||'-'}
{if data.msgRank == 1}{/if}
{if data.askSetting == 1}{/if}
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post_index < 3}
{if post.type == 1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
{if drlist.length>0}
更多相似达人:
{list drlist as dr}{if drlist.length === 3 && dr_index === 0}、{/if}{if drlist.length === 3 && dr_index === 1}、{/if}{if drlist.length === 2 && dr_index === 0}、{/if}{/list}
暂无相似达人,
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
this.p={ currentPage:1,pageNewMode:true,isgooglead3:false,ishotrecompost:false,visitorId:0, first:'',tag:'django学习',recommType:'new',recommenderRole:0,offset:9,type:0,isUserEditor:0,};总结Django中的用户权限模块 - 心灵驿站
总结Django中的用户权限模块
&>>&&>>&总结Django中的用户权限模块
0 次,平均分
此文是总结Django官方网站里面的Document的文章 User authentication in Django
用户(Users)
权限(Permissions)
组(Groups)
消息(Messages)
这些从字面上也都很好的理解,但是我对消息(Messages)还不是很理解…………
1)将&#8217;.contrib.auth&#8217;添加到Setting.py的INSTALLED_APPS 中
2)安装数据库 manage.py syncdb.
其实用户权限模块是Django自己已经写好的app,所以他也具有自身的Models,所以需要同步数据库。
其中他包含User类,他具有以下字段
username,first_name,last_name,email,password,is_staff(是否具有进入网站管理权限),
is_active,is_superuser,last_login,date_joined.
这是Django自带的User的基本的信息,如果你要使用该权限模块,就必须要使用他的User类,
但是通常情况下,我们的用户信息还会有其他的属性,这时我们可以再增加一类来扩展,该类和User的关系是OneToOne。
#这是china-中的代码
class Profile(models.Model):
user = models.OneToOneField(User)
blog = models.CharField(maxlength=128, blank=True)
location = models.CharField(maxlength=128, blank=True)
occupation = models.CharField(maxlength=64, blank=True)
reward = models.IntegerField(default=0, blank=True)
topic_count = models.IntegerField(default=0, blank=True)
post_count = models.IntegerField(default=0, blank=True)
class Admin:
list_display = (&#8216;user&#8217;, &#8216;blog&#8217;, &#8216;location&#8217;, &#8216;occupation&#8217;, &#8216;reward&#8217;, &#8216;topic_count&#8217;, &#8216;post_count&#8217;)
这里列举几个主要的方法
is_anonymous():是否为匿名用户,如果你已经login,则这个方法返回始终为false.
is_authenticated():是否通过验证,也就是通过用户名和密码判断该用户是否存在.
get_group_permissions():得到所有该用户所属组别的权限.
get_all_permissions():得到该用户所有的权限.
has_perm(perm):判断用户是否具有特定权限,perm的格式是appname.codename.
email_user(subject, message, from_email=None):给某用户发送邮件
3) AnonymousUser
AnonymousUser是继承自User接口,但是和User有不同处:
id属性为None
is_anonymous() 返回始终为True
is_authenticated() 返回始终为False
has_perm() 返回始终为False
set_password(), check_password(), save(), delete(), set_groups()和set_permissions() 都会触发 NotImplementedError错误
3、User的验证
1)登陆(Login)
from .contrib.auth import authenticate, login
def my_view(request):
username = request.POST[&#8216;username&#8217;]
password = request.POST[&#8216;password&#8217;]
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
# Redirect to a success page.
# Return an error message.
首先我们要验证这个用户,然后再登陆,登陆成功后,我们可以通过request.user 来得到当前登陆的用户对象。
2)注销(Logout)
from .contrib.auth import logout
def logout_view(request):
logout(request)
# Redirect to a success page.
3)限制非法用户访问
最普通的方法是通过request.user.is_authenticated()来判断
from django.http import HttpResponseRedirect
def my_view(request):
if not request.user.is_authenticated():
return HttpResponseRedirect(&#8216;/login/?next=%s&#8217; % request.path)
另外有一快捷的方法login_required
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
这样当你访问my_view的时候,就需要用户需要通过验证.若不通过则跳转到
/accounts/login/?next=/polls/3/
并将当前访问的页面作为他的一个参数,并且传递三个Context变量
form 一个FormWrapper 对象用来重构登陆表单
next 就是你访问的当前页面
site_name 当前站点名称,在Setting.py中设置SITE_ID的值
另外,我们还需要在你的urls里面配置/accounts/login路径
下面有两种两种,不同的是使用不同的模版,第一种默认使用registration/login.html 模版,第二种方式是我们自定义模版
(r&#8217;^accounts/login/$&#8217;, &#8216;django.contrib.auth.views.login&#8217;),
(r&#8217;^accounts/login/$&#8217;, &#8216;django.contrib.auth.views.login&#8217;, {&#8216;template_name': &#8216;myapp/login.html&#8217;}),
一个login.html模版的实例:
{% extends &#8220;base.html&#8221; %}
{% block content %}
{% if form.has_errors %}
&p&Your username and password didn&#8217;t match. Please try again.&/p&
{% endif %}
&form method=&#8221;post&#8221; action=&#8221;.&#8221;&
&tr&&td&&label for=&#8221;id_username&#8221;&Username:&/label&&/td&&td&{{ form.username }}&/td&&/tr&
&tr&&td&&label for=&#8221;id_password&#8221;&Password:&/label&&/td&&td&{{ form.password }}&/td&&/tr&
&input type=&#8221;submit&#8221; value=&#8221;login&#8221; /&
&input type=&#8221;hidden&#8221; name=&#8221;next&#8221; value=&#8221;{{ next }}&#8221; /&
{% endblock %}
4)用户是否有权限访问
当我们创建了一个带有class Admin:内类的类后,会自动add, create 和 delete三种权限,不过我们也可以自己定义权限。
class USCitizen(models.Model):
class Meta:
permissions = (
(&#8220;can_drive&#8221;, &#8220;Can drive&#8221;),
(&#8220;can_vote&#8221;, &#8220;Can vote in elections&#8221;),
(&#8220;can_drink&#8221;, &#8220;Can drink alcohol&#8221;),
这样我们为USCitizen类定义了三种自定义的权限,其中第一项是codename,第二项是discription。
当我们定义好权限后,我们可以通过user.has_perm来判断是否具有权限
def my_view(request):
if not (request.user.is_authenticated() and request.user.has_perm(&#8216;polls.can_vote&#8217;)):
return HttpResponse(&#8220;You can&#8217;t vote in this poll.&#8221;)
has_perm的参数应该是appname(packname) + . + codename
还有一种更简便的方式,如下:
@user_passes_test(lambda u: u.has_perm(&#8216;polls.can_vote&#8217;))
这样如果该用户没有权限,则自动跳转到/accounts/login/,也可以自定义跳转
@user_passes_test(lambda u: u.has_perm(&#8216;polls.can_vote&#8217;), login_url=&#8217;/login/&#8217;)
4、template中的用户验证
{% if user.is_authenticated %}
&p&Welcome, {{ user.username }}. Thanks for logging in.&/p&
{% else %}
&p&Welcome, new user. Please log in.&/p&
{% endif %}
Permissions
{{ perms.foo }},一个已经登陆的用户对foo的app只要有任何的权限,{{ perms.foo }}就会等于True,反之为False
{{ perms.foo.can_vote }}, 这个很清楚了&#8230;
实例如下:
{% if perms.foo %}
&p&You have permission to do something in the foo app.&/p&
{% if perms.foo.can_vote %}
&p&You can vote!&/p&
{% endif %}
{% if perms.foo.can_drive %}
&p&You can drive!&/p&
{% endif %}
{% else %}
&p&You don&#8217;t have permission to do anything in the foo app.&/p&
{% endif %}
5、authentication backends
Django中队用户的验证都是通过自身的模块,也可以使用其他的模块。
默认的AUTHENTICATION_BACKENDS 是
(&#8216;django.contrib.auth.backends.ModelBackend&#8217;,)
我们可以自己写一个不同的用户验证方式,但必须具有get_user 和authenticate方法
from django.conf import settings
from django.contrib.auth.models import User, check_password
class SettingsBackend:
&#8220;&#8221;&#8221;
Authenticate against the settings ADMIN_LOGIN and ADMIN_PASSWORD.
Use the login name, and a hash of the password. For example:
ADMIN_LOGIN = &#8216;admin&#8217;
ADMIN_PASSWORD = &#8216;sha1$4e987$afbcf42e21bd417fb71db8c66b321e9fc33051de&#8217;
&#8220;&#8221;&#8221;
def authenticate(self, username=None, password=None):
login_valid = (settings.ADMIN_LOGIN == username)
pwd_valid = check_password(password, settings.ADMIN_PASSWORD)
if login_valid and pwd_valid:
user = User.objects.get(username=username)
except User.DoesNotExist:
# Create a new user. Note that we can set password
# to anything, because it won&#8217; the password
# from settings.py will.
user = User(username=username, password=&#8217;get from settings.py&#8217;)
user.is_staff = True
user.is_superuser = True
user.save()
return user
return None
def get_user(self, user_id):
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
这个时候我们需要修改Setting
AUTHENTICATION_BACKENDS = (
&#8216;sputnik.backends.ldapBackend.LDAPBackend&#8217;,
这里还有一片关于Authentication Backends的文章
扫一扫二维码分享 用户认证、权限管理 15、编写前后台动态交互页面 项目实战--开发 BBS 论坛软件 ... 64 09 s8day13 Django 中 session 的运行机制 27 分钟 65 ...  在线互动式文档分享平台,在这里,您可以和千万网友分享自己手中的文档,全文阅读其他用户的文档,同时,也可以利用分享文档获取的积分下载文档  XX,给我返回了 XX 结果,那么我就能确定, 用户是“合法”的),或者认证的方法...写的过程中还是遇到不少问题的: 1.Django 的 CSRF 错误: 我用的 Django 1.4...  在线互动式文档分享平台,在这里,您可以和千万网友分享自己手中的文档,全文阅读其他用户的文档,同时,也可以利用分享文档获取的积分下载文档  08 通过paramiko纪录用户操作日志 60分钟
09 设计堡垒...第9章 自定义WEB框架和Django01 Alex鸡汤预测 4...09 jQuery插件之验证、图片轮播和图标 21分钟 ...

我要回帖

更多关于 django 用户登录 的文章

 

随机推荐