如何设置 url 的权限

我是 Django 新手,我已经实现了一个有效的表单,现在我想在 URL 上设置权限。

提交表单后,它会将我重定向到此 URL

http://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.username


class 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_required

def 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")


临摹微笑
浏览 101回答 1
1回答

呼啦一阵风

一个简单的选项是设置一个会话变量,通知表单已发布且有效,并在显示成功页面之前检查它。请参阅此处的会话示例https://docs.djangoproject.com/en/3.1/topics/http/sessions/#examples例如def formview(request):    # process form    request.session["form_filled"] = True    # redirect to successdef 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')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python