Login
网站首页 > 文章中心 > 其它

Django_内置权限扩展案例详解

作者:小编 更新时间:2023-08-15 07:39:36 浏览量:8人看过

这里是针对"Django 内置权限扩展案例详解"的完整攻略,包含两个示例说明的详细讲解.

1. 示例一

1.1 案例描述

假设我们要实现一个博客系统,需要实现以下功能:

所有用户都可以浏览博客列表和单篇博客.

未登录用户不能对博客进行任何操作(包括新建、修改、删除和点赞).

登录用户可以进行以下操作:

Django_内置权限扩展案例详解-图1

创建自己的博客文章.

修改自己创建的博客文章.

删除自己创建的博客文章.

对任意一篇博客进行点赞.

1.2 解决方案

根据需求,需要对用户进行认证和授权,Django内置的权限系统可以帮助我们实现这些功能.具体实现方式如下:


Django_内置权限扩展案例详解-图2

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



Edit Delete

{% 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两个模版.

现在我们已经完成了第一个示例的代码实现,下面来看一下如何使用权限管理来实现第二个示例.

2. 示例二

2.1 案例描述

假如我们需要实现一个聊天室应用,具有以下几个要求:

所有用户都可以浏览当前聊天记录.

未登录用户不能发言.

登录用户可以自由发言,但是不能修改和删除其他人的聊天记录.

2.2 解决方案

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_内置权限扩展案例详解相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章