Django网站:让网址不可更改

时间:2017-07-10 09:45:08

标签: python html django

我想得到您的建议,以阻止我的客户修改网址。 例如,我的网站中有一个客户端,他会在日志过程后重定向到他自己的页面。

他的主页网址如下:http://localhost:8000/Compagny/id/ idCompagny1对应。

例如:http://localhost:8000/Compagny/1/ 1是第一个Compagny 但是,在网址栏中,如果我的客户写道:http://localhost:8000/Compagny/2/他将被重定向到Compagny2的主页,我不希望这种可能性。

我的问题是:

如何设置一些规则,功能或其他任何内容以便设置不可更改的网址?客户无法更改网址并查看引用其他客户的主页?

谢谢

编辑:

这是我的主页视图:

@login_required
def HomePage_Compagny(request, id) :

    compagny = get_object_or_404(Compagny, pk=id)
    intervention = CompagnyIntervention.objects.filter(Compagny__id=id).all()
    pointsajoutes = CompagnyAjout.objects.filter(Compagny__id=id).all()

    coefficient = CoefficientIntervention.objects.last()

    if request.method == 'POST':

        form_ajout = ContratAjoutFormulaire(request.POST or None)

        if form_ajout.is_valid() :   

            #Several processes

            return HttpResponseRedirect('http://mywebsite/'+id)

    else:
        form_ajout = ContratAjoutFormulaire()


    context = {
        ...
    }

    return render(request, 'CompagnyHomePage.html', context)

此部分的我的网址是:url(r'^Compagny/(?P<id>\d+)/$', views.Homepage_Compagny, name="Homepage"),

2 个答案:

答案 0 :(得分:1)

在您为该页面编写函数的views.py文件中,您应该使用user=request.user,并且可以应用多种方法来阻止来自特定站点的用户。

  1. 在视图中使用if user.is_authenticated():方法。
  2. 为用户提供群组并拒绝访问特定网页
  3. 检查模板是否允许当前用户查看网站
  4. 如果用户访问网址,您可以将其重定向到主页面或显示404或告诉他他没有此网站的访问权限。

    对于模板中的示例,您可以显示错误消息,如:

    {% if request.user == pageowner %} 
    the site code
    
    {%else%}
    
    <h1>This is not your Site. Please Go back</h1>
    {%endif%}
    
    在views.py函数中,您必须定义一个“pageowner”属性,您可以在其中定义“拥有”或至少创建该页面的用户。

答案 1 :(得分:1)

您无法阻止用户在浏览器中输入网址。相反,您应该限制视图中的访问权限,如果不允许用户访问该公司,则返回404。

例如,如果User@login_required def HomePage_Compagny(request, id) : compagny = get_object_or_404(Compagny, pk=id, user=request.user) ... 的外键,那么您可以这样做:

$count = $this->createQueryBuilder('p')
            ->join('p.comments', 'c')
            ->select('count(c.id)')
            ->getQuery()
            ->getSingleScalarResult();