Admin
User && Group && Permission
`INSTALLED_APPS`中添加了四个依赖的`app`,
`django.contrib.auth`,
`django.contrib.contenttypes`,
`django.contrib.messages`
`django.contrib.sessions`。
在模板上下文中添加以下依赖
`django.contrib.auth.context_processors.auth`,
`django.contrib.messages.context_processors.messages`
在中间件中添加以下依赖,
django.contrib.auth.middleware.AuthenticationMiddleware,
django.contrib.messages.middleware.MessageMiddleware。
python manage.py createsuperuser创建一个超级用户,然后输入超级用户的用户名和密码。
在浏览器中输入`127.0.0.1:8000/admin/`进入`admin`登录界面。输入刚刚创建的用户名和密码,进入admin管理界面。
3. 自定义`admin`:
在admin.py中注册 admin.site.register(ArticleModel)。//将自己的模型加入到admin后台
list_display:可以修改展示的列表项
search_field:可以提供搜索的查找项。
list_filter:可以提供一个过滤的表。
class ArticleAdmin(admin.ModelAdmin):
list_display = ('name','author')
search_fields = ('title')
list_filter = ('create_time')
#User
导入模块
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from django.contrib.auth import authenticate, login
from django.contrib.auth import logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Group
创建:
User.objects.create_user(username=username,password=password,email=meail)
修改密码
u = User.objects.get(username='john')
u.set_password('new password')
u.save()
验证用户
user = authenticate(username='john', password='secret')
if user is not None:
# 这个用户存在数据库中
else:
# 这个用户没有存在这个数据库中
登录:
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)
# 登录成功
else:
# 用户没有被激活,不能登录
else:
# 用户名或者密码错误
注销:
from django.contrib.auth import logout
def logout_view(request):
logout(request)
# 注销这个用户。他的session信息将被清除掉。
`login_required`装饰器:
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...
如果没有登录成功,会跳转到`settings.LOGIN_URL`指定的URL中。否则,直接执行函数中的。
LOGIN_URL = '/backstage/admin_login/' //没有登录跳转到这个url下
nexturl = requests.GET.get('next') //获取需要跳转的url
if nexturl:
return redirect(nexturl) //跳转到登录后的url
* `user_passes_test`装饰器:
from django.contrib.auth.decorators import user_passes_test
def email_check(user):
return user.email.endswith('@example.com')
@user_passes_test(email_check)
def my_view(request):
...
可以用来判断当前用户是否满足某种要求们如果没有满足,则会跳转到`settings.LOGIN_URL`.
* `permission_required`装饰器:传一个权限名称,如果这个用户有这个权限,则正常执行view函数,否则将跳转到`settings.LOGIN_URL`定义好的`url`去。
from django.contrib.auth.decorators import permission_required
@permission_required('polls.can_vote')
def my_view(request):
...
`User`模型常用属性和方法:
* `username`:用户名。
* `email`:邮箱。
* `groups`:多对多的组。
* `user_permissions`:多对多的用户权限。
* `is_staff`: 是否是`admin`的管理员。
* `is_active`: 是否激活,判断该用户是否可用。
* `is_superuser`: 是否是超级用户。
* `last_login`: 上次登录时间。
* `date_joined`: 注册时间。
* `is_authenticated`: 是否验证通过了。
* `is_anonymous`:是否是匿名用户。
* `set_password(raw_password)`: 设置密码,传原生密码进去。
* `check_password(raw_password)`: 检查密码。
* `has_perm(perm)`: 判断用户是否有某个权限。
* `has_perms(perm_list)`: 判断用户是否有权限列表中的某个列表。
#`Permission`权限模型:
class Task(models.Model):
class Meta:
permissions = (
("view_task", "Can see available tasks"),
("change_task_status", "Can change the status of tasks"),
("close_task", "Can remove a task by setting its status as closed"),
)
* 在代码中添加权限:
from myapp.models import BlogPost
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get_for_model(BlogPost)
permission = Permission.objects.create(
codename='can_publish', //唯一标识
name='Can Publish Posts', //展示性
content_type=content_type, //代表给哪一个app下的model定义权限
)
* 用户的权限操作:
myuser.user_permissions.set([permission_list])
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear()
myuser.has_perm('foo.add_bar')
* 访问权限的方式:`appname`+`.`+`权限名称`。
# `Group`模型:
* 所属包`django.contrib.auth.models.Group`
* 创建`Group`:必须传一个`name`参数进去。
* `Group`操作:
```python
group.permissions.set([permission_list])
group.permissions.add(permission, permission, ...)
group.permissions.remove(permission, permission, ...)
group.permissions.clear()
```
#Permission 例子:
content_type = ContentType.objects.get_for_model(UserModel)
permission = Permission.objects.create(
codename='test',
name='test1',
content_type=content_type,
)
permission.save()
return HttpResponse('sucsss')
persionn = permission.objects.filter(codename='name').first()
user = User.objects.filter(username='root').first()
user.user_permissions.add(persionn)
#Group 例子:
user = User.objects.filter(username='root').first()
group = Group.objects.create(name='manager')
group.save()
Per = Permission.objects.filter(codename="delete_article1").first()
group.permission.add(Per)
group.user_set.add(user)
return HttpResponse('ok')