fei_middlewares.data_initial 源代码
"""这个middleware用于初始化一些模型
例如,注册用户一开始只有基本的信息:username/first_name/last_name/email等,
其它 UserExtra, UserAsset等等都没有数据,或者某些模型是后来增加的,也没有专门的初始化
这个middleware用于判断用户的某些数据是否已初始化,如果没有则进行初始化,增加相应的记录
例:当用户访问的时候,检测用户是否有UserAsset记录,如果没有,则为该用户初始化,balance=0
"""
from app_models.models_extra_user import UserExtra
from app_models.models_user_asset import UserAsset
from django.core.exceptions import ObjectDoesNotExist
import decimal
[文档]def initial_user_asset(get_response):
"""检查当前登录用户的UserExtra和UserAsset记录是否存在
如果不存在,则自动为用户添加一条记录到数据库
UserAsset增加一条记录,将balance设为0即可
"""
def middleware(request):
if request.user.is_authenticated:
# 如果用户没有UserAsset 记录,则增加并保存该记录
try:
request.user.userasset
except ObjectDoesNotExist:
print(f'-- initial_user_asset --'.ljust(30), f' ---> 用户的 资产记录不存在')
asset = UserAsset(user=request.user)
asset.balance = 0
asset.save()
response = get_response(request)
return response
return middleware
[文档]def initial_user_extra(get_response):
"""检查当前登录用户的UserExtra和UserAsset记录是否存在
如果不存在,则自动为用户添加一条记录到数据库
UserExtra增加一条记录,其中weixin_openid/qq/phone/pay_password都为null
由于weixin_openid/qq/phone均为unique,因此不能设为空字串'',null即可
在以后某个场景,例如用户认证时,由用户将其中的部分或全部信息补齐
"""
def middleware(request):
if request.user.is_authenticated:
# 如果用户还没朋UserExtra 记录,则初始化并保存该记录
try:
request.user.userextra
except ObjectDoesNotExist:
print(f'-- initial_user_extra --'.ljust(30), f'---> 用户{request.user.username}的 userextra 不存在')
userextra = UserExtra(user=request.user)
userextra.save()
response = get_response(request)
return response
return middleware