这里是针对"Django 内置权限扩展案例详解"的完整攻略,包含两个示例说明的详细讲解.
假设我们要实现一个博客系统,需要实现以下功能:
所有用户都可以浏览博客列表和单篇博客.
未登录用户不能对博客进行任何操作(包括新建、修改、删除和点赞).
登录用户可以进行以下操作:
创建自己的博客文章.
修改自己创建的博客文章.
删除自己创建的博客文章.
对任意一篇博客进行点赞.
根据需求,需要对用户进行认证和授权,Django内置的权限系统可以帮助我们实现这些功能.具体实现方式如下:
from django.db import models class Blog(models.Model): return self.title
在settings.py中配置权限:
INSTALLED_APPS = [
'django.contrib.auth.backends.ModelBackend',
]
LOGIN_URL = '/login/'
LOGOUT_URL = '/logout/'
LOGIN_REDIRECT_URL = '/'
首先,我们需要在views.py中实例化Blog表单,渲染模板:
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from .models import Blog
from .forms import BlogForm
def blog_list(request):
return redirect('blog_detail', blog_id=blog_id)
有几点需要注意:
使用的是Django内置的@login_required装饰器来限制用户访问需要登录的页面.
在blog_like视图函数中增加了博客点赞的功能.
针对Blog表,我们编写Blog表单:
from django import forms
from .models import Blog
class BlogForm(forms.ModelForm):
fields = ['title', 'content']
在templates文件夹中的博客列表页blog_list.html:
{% extends 'base.html' %}
{% block content %}
Blog List
{% endfor %}
{% endblock %}
在templates文件夹中的博客详情页blog_detail.html:
{% extends 'base.html' %}
{% block content %}
{{blog.title}}
{{blog.content}}
Written by {{blog.author.username}} on {{blog.created_time}}
Edit
Delete
{% endblock %}
在templates文件夹中的博客创建页blog_create.html:
{% extends 'base.html' %}
{% block content %}
New Blog
{% endblock %}
在templates文件夹中的博客更新页blog_update.html:
{% extends 'base.html' %}
{% block content %}
Edit Blog
{% endblock %}
此外,还需要创建base.html和login.html两个模版.
现在我们已经完成了第一个示例的代码实现,下面来看一下如何使用权限管理来实现第二个示例.
假如我们需要实现一个聊天室应用,具有以下几个要求:
所有用户都可以浏览当前聊天记录.
未登录用户不能发言.
登录用户可以自由发言,但是不能修改和删除其他人的聊天记录.
from django.db import models
from django.contrib.auth.models import User
class Chat(models.Model):
return self.content
和第一个示例类似,在settings.py中配置权限:
INSTALLED_APPS = [
'django.contrib.auth.backends.ModelBackend',
]
LOGIN_URL = '/login/'
LOGOUT_URL = '/logout/'
LOGIN_REDIRECT_URL = '/'
在views.py中实现以下视图函数:
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .models import Chat
def chat_list(request):
return redirect('chat_list')
在templates文件夹中的聊天记录列表页chat_list.html:
{% extends 'base.html' %}
{% block content %}
Chat List
{% endblock %}
在templates文件夹中的聊天记录创建页chat_create.html:
{% extends 'base.html' %}
{% block content %}
New Chat
{% endblock %}
{% extends 'base.html' %}
{% block content %}
Edit Chat
{% endblock %}
以上就是土嘎嘎小编为大家整理的Django_内置权限扩展案例详解相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!