#urls.py
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/$','blog.views.login'), #登录
url(r'^register/$','blog.views.register'), #注册
]
#models.py
from django.db import models
from django.contrib.auth.models import User
#用户字段扩展
class UserProfile(models.Model):
user = models.OneToOneField(User) #实体关系 一对一
#user_id = models.IntegerField(blank=False,null=False)
desc = models.TextField(blank=True,null=True)
QQ = models.IntegerField(blank=True,null=True)
class news(models.Model):
list_fields = ['id','new_thread','new_title','new_url','new_time','new_from','from_url','new_boby']
new_thread =models.TextField(blank=True,null=True)
new_title =models.TextField(blank=True,null=True)
new_url =models.TextField(blank=True,null=True)
new_tim =models.TextField(blank=True,null=True)
new_from =models.TextField(blank=True,null=True)
from_url =models.TextField(blank=True,null=True)
new_boby =models.TextField(blank=True,null=True)
dele =models.BooleanField(default=0)
def __str__(self):
return models.Model.__str__(self)
#自定义权限 其实下面写的 数据库中默创建了 只是codename不同
class Meta:
permissions = (('can_view','Can see new'),
('can_add','Can add new'),
('can_edit','Can edit new'),
('can_delete','can delete new'))
#admin.py
from django.contrib import admin
from blog.models import news,UserProfile
from django.contrib.auth.models import User
#定义 扩展的展示区
class ProfileInline(admin.StackedInline):
model = UserProfile
verbose_name = 'profile'
class UserAdmin(admin.ModelAdmin):
inlines = (ProfileInline,)
admin.site.register(news)
admin.site.unregister(User) #注销User
admin.site.register(User,UserAdmin) #采用自定义的
#views.py
from django.shortcuts import HttpResponse,render_to_response,HttpResponseRedirect
from django.views.generic import ListView,DeleteView
from django import forms
from django.contrib.auth.models import User,Permission
from blog.models import news,UserProfile
import uuid
# Create your views here.
def index(request):
users = User.objects.all()
for user in users:
print user.userprofile.desc
return HttpResponse(users)
#用户输入框
class LoginForm(forms.Form):
email = forms.CharField(label='E-mail:',max_length=100)
pwd = forms.CharField(label='Password',widget=forms.PasswordInput)#指定为输入密码×××
def register(request): #注册
if ('email' or 'pwd') not in request.GET:
lf = LoginForm()
return render_to_response('register.html',{'lf':lf})
lf =LoginForm(request.GET)
email = lf.data['email']
pwd = lf.data['pwd']
user = User()
userprofile = UserProfile()
user.username = uuid.uuid1() #随机生成用户名
user.email = email
user.set_password(pwd)
user.save()
userprofile.user_id = user.id #用户扩展
userprofile.desc = 'NULL!'
userprofile.QQ = '000000'
user.user_permissions = [Permission.objects.get(codename='can_view'),Permission.objects.get(codename='can_add')] #给予 浏览、添加 权限
userprofile.save()
user.save()
return HttpResponseRedirect('/login/') #注册完返回登录界面
def login(request): #登录
if ('email' or 'pwd') not in request.GET:
lf = LoginForm()
return render_to_response('login.html',{'lf':lf})
lf = LoginForm(request.GET)
email = lf.data['email']
pwd = lf.data['pwd']
try:
user = User.objects.get(email=email)
except User.DoesNotExist:
pass
else:
if user.check_password(pwd): #密码是否正确
if user.has_perm('blog.can_view'): #判断是否有‘can_view’权限
#do something 若有此权限 可以定义相应的操作
return HttpResponse("login:" + user.email +'You can see new!')
return HttpResponse("login:" + user.email + ' You can\'t see new!' )
return HttpResponseRedirect('/login/')
#login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form method="get" enctype="multipart/form-data">
{{ lf.as_p }} #LoginForm()的as_p 方法 拆解成两行
<a href="http://127.0.0.1:8000/register">注册</a> <input type="submit" value="登录">
</form>
</body>
</html>
#register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form method="get" enctype="multipart/form-data">
{{ lf.as_p }}
<input type="submit" value="提交">
</form>
</body>
</html>
来测试一下
注册
登录
登陆成功
登录后台查看用户 拥有的权限 user扩展
查看数据库
后台admin用户、用户组权限
- 活动标志,它用来控制用户是否已经激活。 如果一个用户帐号的这个标记是关闭状态,而用户又尝试用它 登录时,即使密码正确,他也无法登录系统。
- 成员标志,它用来控制这个用户是否可以登录管理界面(即:这个用户是不是你们组织里的成员) 由于用
户系统可以被用于控制公众页面(即:非管理页面)的访问权限(详见第十四章),这个标志可用来区分 公众用户和管理用户。 超级用户标志,它赋予用户在管理界面中添加、修改和删除任何项目的权限。 如果一个用户帐号有这个标
志,那么所有权限设置(即使没有)都会被忽略。

这篇博客详细介绍了Django中用户注册、登录的过程,以及如何管理用户权限。用户在登录成功后,可以查看自己在数据库中的权限。此外,还讨论了后台admin用户的权限设置,包括活动标志、成员标志和超级用户标志的含义及作用。
2万+

被折叠的 条评论
为什么被折叠?



