【发布时间】:2017-08-05 02:49:34
【问题描述】:
我偶然发现了邀请功能以了解它的工作原理。我在http://www.pythondiary.com/tutorials/create-invite-only-website.html 上找到了这篇博文。作者在那里说(它检查路径,因为如果不检查这将导致无限循环)。如何使用反向功能检查路径?
class Invite(models.Model):
INVITE_CHOICES = (
('G', 'General'),
('I', 'Invitational'),
)
user = models.OneToOneField(User)
cookie = models.UUIDField(default=uuid.uuid4)
token = models.UUIDField(default=uuid.uuid4, unique=True, editable=False)
def __str__(self):
return self.user.username
# def get_absolute_url(self):
# return reverse('user_mgmt:confirm_invite', kwargs={'token': self.token})
class InvitedMiddleware(object):
def process_request(self, req):
if req.path == '/i.auth': # what path is this?
return None
if not req.user.is_authenticated():
if 'token' in req.COOKIES:
return redirect('user_mgmt.views.login_user')
return None
def process_response(self, req, resp):
if req.user.is_authenticated():
if req.user.is_staff:
return resp
if 'token' in req.COOKIES:
token = req.COOKIES['token']
else:
invite = Invite.objects.get(user=req.user)
token = invite.token
resp.set_cookie('token', token, MAX_AGE=1209600)
return resp
【问题讨论】:
-
你必须分享你的
urls.py来帮助你 -
我还没有理解 req.path 所以我还没有创建 url。是登录的url/路径吗?
-
为了理解
reverse函数(这就是你要问的,对吧?)你必须实现urls.py -
问题是我不明白 req.path 部分。他在那里检查什么?他指的是哪条路?你能告诉我一个例子,你将根据他使用的条件创建什么 url?使用 django-allauth 会有所不同吗?
-
在models.py中我使用了reverse函数,我知道为什么我使用reverse函数以及给出什么路径但不知道req.path部分。你认为会是什么?你能把这个概念说清楚吗?
标签: python django django-allauth django-1.9