您好,匿名用户

django 如何采用权限检查的办法,阻止普通用户直接访问某些地址?

0 投票

需求:

1、自行设计一个后台界面。主要功能:增加栏目、修改栏目、删除栏目、发表文章、修改文章、删除文章、上传图片等。希望只有超级管理员可以看到“后台管理”这个入口,其余普通用户无法看到,且无法直接用网址登录到这个界面(栏目地址:http://127.0.0.1:8000/article/article-column/)。
2、已经在html上对“后台管理”做出权限处理,超级管理员可以见,普通用户不可见。但是普通用户登录后还是可以推测出“后台管理”地址,直接登录到此界面。如何才能使得即使登录成功后,普通用户拷贝到网址也无法登录到“后台管理”界面呢!谢谢!

代码:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
from .models import ArticleColumn
from .forms import ArticleColumnForm
from django.views.decorators.http import require_POST
from .models import ArticlePost
from .forms import ArticlePostForm
from django.shortcuts import get_object_or_404

新增栏目

@login_required(login_url='/account/login/')
@csrf_exempt
def article_column(request):

if request.method == "GET":
    columns = ArticleColumn.objects.filter(user=request.user)
    column_form = ArticleColumnForm()
    return render(request, "article/column/article_column.html", {"columns": columns, "column_form": column_form })

if request.method == "POST":
    column_name = request.POST['column']
    columns = ArticleColumn.objects.filter(user_id=request.user.id, column=column_name)
    if columns:
        return HttpResponse('2')
    else:
        ArticleColumn.objects.create(user=request.user, column=column_name)
        return HttpResponse('1')

编辑栏目

@login_required(login_url='/account/login/')
@require_POST
@csrf_exempt
def rename_article_column(request):

column_name = request.POST["column_name"]
column_id = request.POST['column_id']
try:
    line = ArticleColumn.objects.get(id=column_id)
    line.column = column_name
    line.save()
    return HttpResponse("1")
except:
    return HttpResponse("0")

删除栏目

@login_required(login_url='/account/login/')
@require_POST
@csrf_exempt
def del_article_column(request):

column_id = request.POST['column_id']
try:
    line = ArticleColumn.objects.get(id=column_id)
    line.delete()
    return HttpResponse("1")
except:
    return HttpResponse("2")

发布文章

@login_required(login_url='/account/login/')
@csrf_exempt
def article_post(request):

if request.method == "POST":
    article_post_form = ArticlePostForm(data=request.POST)
    if article_post_form.is_valid():
        cd = article_post_form.cleaned_data
        try:
            new_article = article_post_form.save(commit=False)
            new_article.author =request.user
            new_article.column = request.user.article_column.get(id=request.POST['column_id'])
            new_article.save()
            return HttpResponse("1")
        except:
            return HttpResponse("2")
    else:
        return HttpResponse("3")
else:
    article_post_form = ArticlePostForm()
    article_columns = request.user.article_column.all()
    return render(request, "article/column/article_post.html",
                  {"article_post_form": article_post_form, "article_columns": article_columns})

文章列表

@login_required(login_url='/account/login')
def article_list(request):

articles = ArticlePost.objects.filter(author=request.user)
return render(request, "article/column/article_list.html", {"articles": articles})

文章详情

@login_required(login_url='/account/login')
def article_detail(request, id, slug):

article = get_object_or_404(ArticlePost,id=id, slug=slug)
return render(request, "article/column/article_detail.html", {"article":article})

删除文章

@login_required(login_url='/account/login')
@require_POST
@csrf_exempt
def del_article(request):

article_id = request.POST['article_id']
try:
    article = ArticlePost.objects.get(id=article_id)
    article.delete()
    return HttpResponse("1")
except:
    return HttpResponse("2")

修改文章

@login_required(login_url='/account/login')
@csrf_exempt
def redit_article(request, article_id):

if request.method == "GET":
    article_columns = request.user.article_column.all()
    article = ArticlePost.objects.get(id=article_id)
    this_article_form = ArticlePostForm(initial={"title":article.title})
    this_article_column = article.column
    return render(request, "article/column/redit_article.html",
                  {"article":article, "article_columns": article_columns, "this_article_column": this_article_column, "this_article_form":this_article_form})

elif request.method == "POST":
     redit_article = ArticlePost.objects.get(id=article_id)
     try:
         redit_article.column = request.user.article_column.get(id=request.POST['column_id'])
         redit_article.title = request.POST['title']
         redit_article.body = request.POST['body']
         redit_article.save()
         return HttpResponse("1")
     except:
         return HttpResponse("2")

#html

{% if user.is_superuser %}
<li>后台管理</li>
{% endif %}
用户头像 提问 5月10日 @ Zilean 中士 (1,205 威望)
分享到:

1个回答

0 投票
 
最佳答案

2种方式:

1: 在 后台管理 的view函数里面, 判断是否是符合条件的用户, 不符合直接重定向到首页 或者 显示特殊的权限错误页面

2: 使用 permission_required 装饰 后台管理 的view函数

参考django文档

用户头像 回复 5月10日 @ Fizz 上士 (1,565 威望)
选中 5月9日 @Zilean

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

IT技术交流群 - 随意问
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...