app.view.base 源代码
from utils.http.dependency import UserRequest
from django.core.exceptions import ImproperlyConfigured
from utils.views import SecureView, SecureTemplateView, SecureJsonView
from app.log import ProfileLogger
from app.utils import get_sidebar_and_navbar
__all__ = ['ProfileView', 'ProfileTemplateView', 'ProfileJsonView']
[文档]
class ProfileView(SecureView):
request: UserRequest
PrepareType = SecureView.NoReturnPrepareType | None
check_access: bool = True
need_prepare: bool = True
logger_name: str
def _check_access(self, redirect_url='/logout/') -> None:
if not self.request.user.is_valid():
return self.response_created(self.redirect(redirect_url))
def _check_new_user(self, init_password: bool = True) -> None:
if not self.request.user.is_newuser:
return
if self.request.session.get('confirmed') != 'yes':
return self.response_created(self.redirect('/agreement/'))
if init_password:
return self.response_created(self.redirect('/modpw/'))
[文档]
def check_perm(self) -> None:
# TODO: 统一本函数和工具函数check_user_access
super().check_perm()
if self.check_access:
self._check_access()
self._check_new_user()
[文档]
def dispatch_prepare(self, method: str):
return self.default_prepare(method, return_needed=False,
prepare_needed=self.need_prepare)
[文档]
def get_logger(self):
return ProfileLogger.getLogger(self.logger_name)
[文档]
class ProfileTemplateView(ProfileView, SecureTemplateView):
logger_name: str = 'ProfileError'
page_name: str
[文档]
def render(self, **kwargs):
if not hasattr(self, 'page_name'):
raise ImproperlyConfigured('page_name is not defined!')
self.extra_context['bar_display'] = get_sidebar_and_navbar(
self.request.user, self.page_name)
return super().render(**kwargs)
[文档]
class ProfileJsonView(ProfileView, SecureJsonView):
logger_name: str = 'ProfileAPIerror'
[文档]
def json_response(self, extra_data = None, **kwargs):
ProfileLogger.getLogger('recording').info('json_response')
return super().json_response(extra_data, **kwargs)