django覆盖auth登录方法

标签 django methods authentication overriding

我想重写django.contrib.auth__init__.py中的login函数

我做了以下步骤:

urls.py

url(r'^login/$', 'my_login'),

views.py

from django.contrib import auth

def login(request, user, backend=None):
   # do some stuff

settings.py

   INSTALLED_APPS = [
   #'django.contrib.auth',
    'my_auth_app'
   ]

但我觉得这是错误的做法。

实际上我想使用覆盖的login方法获得默认的contrib.auth

最佳答案

完成了这个方法。

url.py

# separate my custom login from django default auth
path('accounts/login/', CustomLoginView.as_view(), name='login'), 
path('accounts/', include('django.contrib.auth.urls')),

View .py

def custom_login(request, user, backend=None):
    """
    modificated generic.auth login.
    Send signal with extra parameter: previous [session_key]
    """

    # get previous seesion_key for signal 
    prev_session_key = request.session.session_key

    """ 
        original code

    """
    # send extra argument prev_session_key 
    user_logged_in.send(sender=user.__class__, request=request, user=user, prev_session_key=prev_session_key)

# custom class-based view overriden on LoginView
class CustomLoginView(LoginView):

    def form_valid(self, form):
        """Security check complete. Log the user in."""

        # changed default login
        custom_login(self.request, form.get_user())

        return HttpResponseRedirect(self.get_success_url())

当我基于默认的login()制作custom_login时,恐怕这不是最好的方法,因为我正在复制部分原始代码。也许在这里使用装饰器更好?

关于django覆盖auth登录方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303572/

相关文章:

ios应用程序授权流程?

java - 使用类的对象调用另一个类的方法

iphone - 当应用程序进入前台时如何呈现模态视图 Controller ?

ruby-on-rails - 从中间件中触发基本的 HTTP 身份验证

javascript - 如何在 firebase 中向用户添加自定义配置文件详细信息?

java - 数学公式未返回正确答案

python - 使用 Python 条件和 Django 返回进行 DRY

python - CSRF token 丢失或 Django 无效

python - 在 Django 模板 Django 中获取特定日期

python - Django:在 settings.py 中获取远程 IP 地址