fei_middlewares package

Submodules

fei_middlewares.data_initial module

这个middleware用于初始化一些模型

例如,注册用户一开始只有基本的信息:username/first_name/last_name/email等, 其它 UserExtra, UserAsset等等都没有数据,或者某些模型是后来增加的,也没有专门的初始化 这个middleware用于判断用户的某些数据是否已初始化,如果没有则进行初始化,增加相应的记录 例:当用户访问的时候,检测用户是否有UserAsset记录,如果没有,则为该用户初始化,balance=0

fei_middlewares.data_initial.initial_user_asset(get_response)[源代码]

检查当前登录用户的UserExtra和UserAsset记录是否存在

如果不存在,则自动为用户添加一条记录到数据库 UserAsset增加一条记录,将balance设为0即可

fei_middlewares.data_initial.initial_user_extra(get_response)[源代码]

检查当前登录用户的UserExtra和UserAsset记录是否存在

如果不存在,则自动为用户添加一条记录到数据库 UserExtra增加一条记录,其中weixin_openid/qq/phone/pay_password都为null 由于weixin_openid/qq/phone均为unique,因此不能设为空字串’’,null即可 在以后某个场景,例如用户认证时,由用户将其中的部分或全部信息补齐

fei_middlewares.drf_token_info module

检查用户是已经生成了token,drf需要token才能认证用户

fei_middlewares.drf_token_info.drf_user_info(get_response)[源代码]

log用户的id和token

如果用户认证成功,打印出用户id和token;否则显示failed信息 如果从浏览器访问,即使是已登录用户也会失败,因为浏览器用户是通过session认证的

客户端直接访问的用户提供了 ‘Authorization: Token 954… ‘ 这个header才能被drf认证 可以用curl/postman等直接模拟一个客户端的访问: curl -X GET -H ‘Authorization: Token <此处是一个有效的token>’ http://demo.hhxx.me/v2/

fei_middlewares.generate_token module

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

仅作为一个middleware的示例 实际上为已有用户创建token可以直接在django shell里进行一次操作

fei_middlewares.generate_token.generate_token_if_not_exist(get_response)[源代码]

为用户生成一个token

用户token在app_models/models.py里已经有一个生成功能,为每个新注册的用户生成token 不过对于系统中已有的用户,就不起作用 此middleware在每个用户访问的时候,会检查该用户是否已经有token,没有的话即为用户生成并入库

fei_middlewares.headers_info module

检查request / response 的headers 用于debug

fei_middlewares.headers_info.request_headers(get_response)[源代码]
下面这几个常规的headers不显示:

Content-Length —> Referer —> http://127.0.0.1:8000/v2/ Connection —> keep-alive Host —> 127.0.0.1:8000 Upgrade-Insecure-Requests —> 1

下面这几个headers会被显示

Content-Type —> text/plain Cookie —> csrftoken=COuMh90BlYq4dOSxOq …; sessionid=1h8ntp1x … Accept —> text/html,application/xht … User-Agent —> Mozilla/5.0 (Macintosh; Intel Mac OS X 1 … Accept-Language —> en-us Accept-Encoding —> gzip, deflate request.user.id —> 25

fei_middlewares.headers_info.response_headers(get_response)[源代码]

显示response的headers

和request_headers类似,但这里显示的是reponse headers

fei_middlewares.logging_user module

记录当前访问的用户

fei_middlewares.logging_user.django_current_user(get_response)[源代码]

记录当前访问的用户

django用户,非drf用户

fei_middlewares.logging_user.logging_user(get_response)[源代码]

日志记录到日志表

‘x_forwarded_for’, ‘x_real_ip’, ‘remote_addr’, ‘userid’, ‘username’, ‘datetime’, ‘url’, ‘method’, ‘payload’,

fei_middlewares.user_filter module

禁示测试用户改密码

fei_middlewares.user_filter.disable_user_change_pass(get_response)[源代码]

简单粗暴的禁止测试用户改密码

用户更改密码的url是 /admin/password_change/ 因此判断当用户名是 ‘user’,并且 url里包含 admin/password_change时,判断用户修改密码 直接返回一个警告消息即可 一种简单的实现,但是不保证用户不能真正找到其它修改密码的办法 生产系统不能依靠这种方式

Module contents

Custom middleware