簡體   English   中英

如何設置 url 權限

[英]How can i set permission on 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")

    else:
        form = CotCodeForm()

    context = {
        'form':form,
    }
    return render(request, 'transfer_cotcode.html', context)

@login_required
def SuccessfulView(request):
    return render(request, 'successful_transfer.html')

一個簡單的選擇是設置一個會話變量,通知表單已發布且有效,並在顯示成功頁面之前檢查它。 在此處查看會話示例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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM