为了账号安全,请及时绑定邮箱和手机立即绑定

如何设置 url 的权限

如何设置 url 的权限

临摹微笑 2023-09-26 16:39:59
我是 Django 新手,我已经实现了一个有效的表单,现在我想在 URL 上设置权限。提交表单后,它会将我重定向到此 URLhttp://127.0.0.1:8000/success/无需提交表单,我可以手动输入 URL 名称http://127.0.0.1:8000/success/,它会将我带到同一页面。如何设置“成功”网址的权限,以便用户无法手动查看页面,除非表单有效并提交?我需要一个装饰器吗?模型:class Profile(models.Model):    user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True)     profile_pic = models.ImageField(upload_to='ProfilePicture/', default="ProfilePicture/avatar.png", blank=True)       phone = models.IntegerField(default='0', blank=True)    email = models.EmailField(blank=True)    date_of_birth = models.CharField(max_length=50, blank=True)    address = models.TextField(blank=True)    date = models.DateTimeField(auto_now_add=True)      class Meta:        verbose_name = 'Profile'        verbose_name_plural = 'Profiles'        ordering = ['-date']    '''Method to filter database results'''    def __str__(self):        return self.user.usernameclass CotCode(models.Model):    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)    cot_code = models.IntegerField(default='0', blank=True)    date = models.DateTimeField(auto_now_add=True)     class Meta:        verbose_name = 'CotCode'        verbose_name_plural = 'CotCode'        ordering = ['-date']    def __str__(self):        return self.user.username网址:path('cot/', TransferCOTView, name='transfer_cot'),path('success/', SuccessfulView, name='successful_trans'),浏览次数:@login_requireddef TransferCOTView(request):    form = CotCodeForm(request.POST)    if request.method == "POST":        if form.is_valid():            cot_code = form.cleaned_data.get('cot_code')        try:            match = CotCode.objects.get(cot_code=cot_code)            return redirect('site:successful_trans')        except CotCode.DoesNotExist:             messages.info(request, "Wrong code")
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

一个简单的选项是设置一个会话变量,通知表单已发布且有效,并在显示成功页面之前检查它。请参阅此处的会话示例https://docs.djangoproject.com/en/3.1/topics/http/sessions/#examples


例如


def formview(request):

    # process form

    request.session["form_filled"] = True

    # redirect to success


def success(request):

    if not request.session.get("form-filled"):

        raise Http404("Form not filled")

    del request.session["form_filled"] # success view visible once after form is filled

    # return view template

您还可以检查用户是否在成功视图中填写了 COT 代码。


def SuccessfulView(request):

    cot_code_exists = CotCode.objects.filter(user=request.user).count()

    if not cot_code_exists:

        raise Http404("Cot code does not exist for user")

    return render(request, 'successful_transfer.html')


查看完整回答
反对 回复 2023-09-26
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信