app.utils module¶
- app.utils.check_account_setting(request: HttpRequest)[源代码]¶
- app.utils.check_user_access(redirect_url='/logout/', is_modpw=False)[源代码]¶
Decorator for views that checks that the user is valid, redirecting to specific url if necessary. Then it checks that the user is not first time login, redirecting to the modify password page otherwise.
- app.utils.get_captcha(request, username, valid_seconds=None, more_info=False)[源代码]¶
noexcept - username: 学号/小组号, 不一定对应request.user(此时应尚未登录) - valid_seconds: float or None, None表示不设置有效期 ->captcha: str | (captcha, expired, old) if more_info
- app.utils.get_classified_user(user: User, user_type: Literal[User.Type.PERSON], *, update: bool = False, activate: bool = False) NaturalPerson [源代码]¶
- app.utils.get_classified_user(user: User, user_type: Literal[User.Type.ORG], *, update: bool = False, activate: bool = False) Organization
- app.utils.get_classified_user(user: User, user_type: str | None = None, *, update: bool = False, activate: bool = False) None
获取基础用户对应的用户对象
- 参数:
user (User) -- 用户对象
user_type (str, optional) -- 用来指定模型类型,非法值抛出`AssertionError`
- 关键字参数:
update (bool, optional) -- 获取带锁的对象,需要在事务中调用
activate (bool, optional) -- 只获取活跃的用户,由对应的模型管理器检查
- 返回:
用户实例
- 返回类型:
ClassifiedUser
- 抛出:
AssertionError -- 非法的用户类型
DoesNotExist -- 用户不存在,当用户是合法用户且不筛选时,可假设不抛出此异常
- app.utils.get_person_or_org(user: User, user_type: str | Type | None = None, *, update=False, activate=False) None ¶
获取基础用户对应的用户对象
- 参数:
user (User) -- 用户对象
user_type (str, optional) -- 用来指定模型类型,非法值抛出`AssertionError`
- 关键字参数:
update (bool, optional) -- 获取带锁的对象,需要在事务中调用
activate (bool, optional) -- 只获取活跃的用户,由对应的模型管理器检查
- 返回:
用户实例
- 返回类型:
ClassifiedUser
- 抛出:
AssertionError -- 非法的用户类型
DoesNotExist -- 用户不存在,当用户是合法用户且不筛选时,可假设不抛出此异常
YWolfeee Aug 16 修改left siderbar的逻辑,统一所有个人和所有小组的左边栏,不随界面而改变 这个函数负责统一get sidebar和navbar的内容,解决了信箱条数显示的问题 user对象是request.user对象直接转移 内容存储在bar_display中 Attention: 本函数请在render前的最后时刻调用
added by syb, 8.23: 在函数中添加了title_name和navbar_name参数,根据这两个参数添加帮助信息 现在最推荐的调用方式是:在views的函数中,写 bar_display = utils.get_sidebar_and_navbar(user, title_name, navbar_name)
- app.utils.get_std_underground_url(underground_url)[源代码]¶
检查是否是地下室网址,返回(is_underground, standard_url) - 如果是,规范化网址,否则返回原URL - 如果参数为None,返回URL为地下室网址
- app.utils.get_std_url(arg_url: str, site_url: str, path_dir=None, match_func=None)[源代码]¶
检查是否匹配,返回(is_match, standard_url),匹配时规范化url,否则返回原url
- 参数:
arg_url (-)
site_url (-)
path_dir (-)
match_func (-)
- app.utils.record_attack(except_type=None, as_attack=False)[源代码]¶
临时用于拦截ip的装饰器,在用户验证层下、错误捕获层上,需要整理本函数至其他位置
- app.utils.record_modify_with_session(request: HttpRequest, info='')[源代码]¶
- app.utils.site_match(site, url, path_check_level=0, scheme_check=False)[源代码]¶
检查是否是同一个域名,也可以检查路径是否相同 - path_check_level: 0-2, 不检查/忽视末尾斜杠/完全相同 - scheme_check: bool, 协议是否相同
外层保证 username 是一个自然人的 username 并且合法
登录时 shift 为 false,切换时为 True,并设置request.user 切换到某个组织时 oname 不为空,否则都是空
- app.utils.user_login_org(request: HttpRequest, org: Organization) dict [源代码]¶
令人疑惑的函数,需要整改 尝试从用户登录到org指定的组织,如果不满足权限,则会返回wrong 返回wrong或succeed,并更新request.user