fei_middlewares.generate_token 源代码

"""为当前系统中已有的用户创建token

    仅作为一个middleware的示例
    实际上为已有用户创建token可以直接在django shell里进行一次操作
    
.. code-block:
    users = User.objects.all()
    for user in users:
        if getattr(user, 'auth_token', True):
            token = Token(user=user)
            token.save()

"""

from django.core.exceptions import ObjectDoesNotExist
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token

[文档]def generate_token_if_not_exist(get_response): """为用户生成一个token 用户token在app_models/models.py里已经有一个生成功能,为每个新注册的用户生成token 不过对于系统中已有的用户,就不起作用 此middleware在每个用户访问的时候,会检查该用户是否已经有token,没有的话即为用户生成并入库 """ def middleware(request): if request.user.is_authenticated: try: request.user.auth_token print(f'-- generate_token_if_not_exist --'.ljust(30), f'===> token already existed: {request.user}') # 对应: from django.core.exceptions import ObjectDoesNotExist # except ObjectDoesNotExist as e: # 对应: from django.contrib.auth.models import User except User.auth_token.RelatedObjectDoesNotExist as e: # 对应: from rest_framework.authtoken.models import Token # except Token.DoesNotExist as e: token = Token(user=request.user) token.save() print(f'-- generate_token_if_not_exist --'.ljust(30), f'---> created token for user: {request.user}') # print(traceback.format_exc()) response = get_response(request) return response return middleware