我是Djnago和Python的新手。
我在Djnago中创建了名为StaffAccessMiddleware的中间件类
我使用social_django应用程序从Gmail创建用户,我想实现
is_staff = True
并仅在用户首次登录DJango时分配至少一个组。
我的问题是如何在中间件中访问用户,并仅检查第一次用户将在此代码中输入,在这种情况下,我需要分配is_staff = True
并在创建用户后分配组。
我试图创建如下所示的中间件类。
class StaffAccessMiddleware(object):
def process_request(self, request):
if hasattr(request, 'user') and request.user.is_authenticated():
user = request.user
if groups:
groups[0].name
return None
答案 0 :(得分:1)
我建议您使用pipeline
,如下所示:
is_staff=True
is_new
参数并仅在is_new
为True
时更新用户。当用户首次登录(即创建用户)时,Social-auth将发送is_new=True
。SOCIAL_AUTH_PIPELINE
设置中添加您的自定义管道。permission_required
设置将某些视图限制为工作人员用户。您的最终管道可能看起来像这样:
def make_new_user_as_staff(backend, user, is_new=False, *args, **kwargs):
if backend.name == 'gmail' and is_new:
user.is_staff = False
user.save()
在settings.py
(或设置文件)中
SOCIAL_AUTH_PIPELINE = (
#other pipelines goes here
"<full-path-to-make_new_user_as_staff-pipeline>",
#some other pipelines goes here
)
参考:https://python-social-auth-docs.readthedocs.io/en/latest/pipeline.html
让我知道我是否误解了您的查询/这不能解决您的问题