Django中对于Authentication用户User的扩展
来源:互联网 发布:win7 apache无法启动 编辑:程序博客网 时间:2024/04/25 08:57
django.contrib.auth.models 中的User为我们提供了很强大的登录、登出系统,但是在使用时未免有一些不符合我们的预先期望,可能需要对User进行一些额外的扩展。
以下提供一个进行扩展的方法。
我在实践中,开始是单独仅仅用Django提供的User,但是一直出现403 Forbidden页面,而且按照提示进行了修改,可是还是无法消除这个问题,后来无奈放弃了转而想到这种思路,在网上查了一下相关资料,确有这样的实现方法。
在模型中使用OneToOneField实现相互关联,models.py文件如下
class User_c(models.Model):
user = models.OneToOneField(User)
disc = models.CharField(max_length=40)
def __unicode__(self):
return self.user.username
你可以对上述模型进行不同的扩展,只要有user OneToOneField就可以了,这样也可以避免上述问题,但是必须得引入
from django.views.decorators.csrf import csrf_exempt
并且在视图前加上csrf_exempt,有可能需要在表单中加入{% csrf_token %}
urls文件配置如下
url(r'^login/$', views.login),
url(r'^user/login/$', views.user_login),
url(r'^register/$', views.register),
url(r'^user/register/$', views.user_register),
url(r'^user/logout/$', views.user_logout),
>>>from django.contrib.auth.models import User
>>>from WWTest.models import User_c
>>>user = User.objects.create_user(username='hello world', password='nihaoshijie')
>>>uc = User_c.objects.create(user=user, disc='wo chi django xinshou cainiao')
这样你就创建了一个User_c对象了,你可以在数据库中看到有user_c表,还有auth_user表,因为创建了User对象
例如我们现在可以实现一个登录、注册、注销功能
@csrf_exempt
def register(request):
return render_to_response('register.html')
def user_register(request):
username = request.POST['username']
password = request.POST['password']
disc = request.POST['disc']
try:
u = User.objects.create_user(username=username, password=password)
user = User_c.objects.create(user=u, disc=disc)
return render_to_response('login.html')
except:
return HttpResponse('false')
register.html如下
<form method="POST" action="/user/register/">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="text" name="disc" />
<input type="submit" value="ok" />
</form>
表单发送至/user/register/地址里,然后调用user_register的视图函数,注意User.objects.create_user这个函数会产生错误,如果用户创建不成功会报错,需要用到try-except
def login(request):
return render_to_response('login.html')
@csrf_exempt
def user_login(request):
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
auth.login(request, user)
return HttpResponseRedirect('/index/')
else:
return HttpResponse('No')
login.html如下
<form method="post" action="/user/login/">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="submit" value="ok"/>
</form>
用户登录界面可以自己设计定义,表单得action地址为/user/login/此时便可以执行user_login视图函数
user = auth.authenticate(username=username, password=password)
如果登录不成功则user为None
@csrf_exempt
def user_logout(request):
print 'good bye user: ', request.user
auth.logout(request)
return render_to_response('login.html')
index.html如下
<input type="button" name="Submit" value="按钮" onClick="window.location.href='/user/logout/'">
这个按钮当点击时触发window.location.href='/user/logout/' 跳转至此页面触发user_logout实现登出功能,auth.logout函数不会产生错误,哪怕你没有在线用了该函数也不会报错
- Django中对于Authentication用户User的扩展
- Django中扩展User模型
- User Authentication in Django
- 五 Django 1.5.4 User Authentication 用户认证
- 扩展django的user表
- django 扩展user字段
- Django中的用户与Authentication
- User authentication in Django 阅读批注
- How to Extend Django User Model 如何扩展Django用户模型
- django 新建一个用户表 替代系统中自带的user
- 最简单 扩展django user
- 基于How To Tango With Django 1.9的重新实践(9)——User Authentication
- Django笔记 如何扩展User表的字段
- Django笔记 如何扩展User表的字段
- django用户表扩展
- Django用户认证系统 authentication system
- Django自定义用户认证系统Customizing authentication
- django 用户认证 user对象
- 关与双向指针
- 嵌入式Linux学习路线
- 问题解决]Error: ShouldNotReachHere() [整理]
- autofac使用笔记
- Java 使用poi导入excel,结合xml文件进行数据验证的例子
- Django中对于Authentication用户User的扩展
- Problem C : Train Swapping
- 调试
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- android应用中去掉标题栏的方法
- SQLite 清空表并将自增列归零
- iOS_33_音乐播放(后台播放+锁屏歌词)
- 如何赶超竞争对手排名
- 像黑客一样使用Linux