python - 如何将用户限制在某些特定的 url
问题描述
我想通过在地址栏中键入 url 来限制用户访问支付和结帐页面,例如“home/shop/checkout/”和“home/shop/payment/” 我想让这些页面只有在 buy_now 表单是有效或 items_buy_now 表格有效
网址.py
path('payment/',views.payment,name='payment'),
path('checkout/', views.checkout, name="checkout"),
视图.py
def checkout(request):
request.session.pop('data', None)
messages.success(request,'Done.Thanks for using our services.')
return redirect("shop:mycart")
def payment(request):
return render(request,'shop/payment.html')
def buy_now(request,slug):
if not request.user.is_authenticated:
messages.info(request, 'You have to logged in first.')
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
product = Product.objects.get(active=True, slug=slug)
if request.method == "POST":
form = BuyerDeliveryForm(request.POST)
if form.is_valid():
buyer = form.save(commit=False)
buyer.save()
return redirect('shop:payment')
else:
form = BuyerDeliveryForm()
return render(request, 'shop/delivery_form.html', {'form': form, 'products': product})
def items_buy_now(request):
if not request.user.is_authenticated:
messages.info(request, 'You have to logged in first.')
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
if request.method == "POST":
form = BuyerDeliveryForm(request.POST)
if form.is_valid():
buyer = form.save(commit=False)
buyer.save()
return redirect('shop:payment')
else:
form = BuyerDeliveryForm()
return render(request, 'shop/delivery_form.html', {'form': form})
解决方案
最好的方法是:
- 创建一个管理 items_buy 或 items_buy 的 Mixin
- 对于所有必须处理限制的视图,从相应的 mixin 中对其进行子类化。
- 在子类的 get 函数中调用该方法来检查用户是否有权访问该页面。
推荐阅读
- react-native - 我如何获得 2 天之间的值(天数)
- linux - 如何按计划为 docker system prune 编写 shell 脚本
- java - 使用 CardLayout 切换面板后 JTextField 不出现
- c - 使用最小的必要 C 类型与仅使用 int
- numpy - 尝试将 numpy.ndarray 转换为 cv2.Videocapture 类对象或实时视频源之类的东西
- flutter - 在颤动中单击输入后键盘被解除和多行问题
- jquery - 从 JSON 数据获取动态表的列标题
- spring-boot - 如何在 Spring Boot 中为单个 API 强制使用 HTTPS
- cakephp - Cakephp 触发错误路由
- laravel-7 - 如何在具有授权类型的 laravel http 请求中传递客户端 ID 和机密?