在我的项目中,我们需要某种系统来允许/拒绝对URL的某些访问。
这个例子,我们想要制作某种向导。
用户在第一个屏幕(A屏幕)输入第一个对象,然后按"继续"。 现在我们获取数据并重定向到第二个屏幕(B屏幕),用户应该输入第二个对象。 向导继续...... 问题是,如果我们这样做,用户可以在浏览器中写入B url并访问B屏幕。用户已登录,但即便如此,我们也不希望他在没有通过A屏幕的情况下到达那里。
我们不知道如何实现这一目标或在互联网上寻找这个。我们只知道执行此操作的用户会话。
还有其他方法吗?一些帮助?
提前致谢。
答案 0 :(得分:1)
我认为外键是您正在寻找的解决方案使'A'作为'B'的外键并且在'B'的url中将'A'的id作为参数传递为{{1这样,第一个用户将输入“A”中的数据,它将存储在数据库中,然后通过ID“A”访问“B”。阅读有关外键here的更多信息。
答案 1 :(得分:1)
目前,我正在从事数学作业项目。有三种类型的用户。教授,学生和管理员。以下代码段将拒绝用户根据用户访问网址'类型。修改它之后,您必须将此方法装饰器添加到为http请求提供服务的请求方法中。
def deny_a_thing(function):
def wrapper(request, *args, **kw):
try:
test = User.objects.get(username=request.user) # This will get the username
except ObjectDoesNotExist:
raise Http404 # return 404, if the user doesn't exist. You can change it to anything
if not request.user.is_authenticated(): # If the user is not authenticated, return to the rootm. You can also change this.
return HttpResponseRedirect("/")
try:
if test.groups.filter()[0].name != "professors": # Add your test here. E.g: If user saved A, don't go B.
raise Http404
except IndexError:
raise Http404
else:
return function(request, *args, **kw)
return wrapper
将以下内容添加到您的方法
@deny_a_thing # This will deny the user from doing the thing you didn't want the user to do.
def some_page_request(request):
return HttpResponse("OMG")
检查此link以获得更简单的装饰器