Python 基于url参数在django中创建自定义装饰器

Python 基于url参数在django中创建自定义装饰器,python,django,decorator,django-urls,Python,Django,Decorator,Django Urls,我有两个登录URL: /配置文件/登录/ /移动/配置文件/登录/ 我有一个观点 @login_required def favorited_spreads(request ,page_template='spreads/favorited_spreads_ajax.html', template='spreads/favorited_spreads.html',mode=None): profile = request.user.profiles spreads

我有两个登录URL:

  • /配置文件/登录/
  • /移动/配置文件/登录/
  • 我有一个观点

    @login_required
    def favorited_spreads(request ,page_template='spreads/favorited_spreads_ajax.html',
            template='spreads/favorited_spreads.html',mode=None):
        profile = request.user.profiles
        spreads = profile.favorite_by.all()
        context = {
                'spreads': spreads,
                'profile': profile,
            }
        if request.is_ajax():
            template=page_template
        return render(request, template,context)
    
    我的两个URL是:

     url(r'^favorites/$',
        'favorited_spreads', name='favorited_spreads'),
    url(r'^mob/favorites/$',
            'favorited_spreads',{
                   'template':'mobapps/spreads/favorited_spreads.html',"mode":"mob"}, name='favorited_spreads_mob'),
    
    现在我的问题是,我想要一个装饰器,而不是
    @login\u required
    ,比如
    @custom\u login\u required
    ,如果用户没有经过身份验证,并且进入url
    /favorites/here mode=None
    ,那么它应该被重定向到url
    /profile/login/

    如果他在没有身份验证的情况下进入url
    /mob/favorites/
    (此处mode='mob'),他应该被重定向到登录url
    /mob/profile/login/


    非常感谢您的帮助。如果问题不清楚,请评论

    我自己创建了一个定制的装饰器

    def custom_login_required(function,redirect_field_name=REDIRECT_FIELD_NAME):
        def wrapped_func(request,mode=None, *args,**kwargs):
            login_url=settings.MOBILE_LOGIN_URL if mode else settings.LOGIN_URL
            if request.user.is_authenticated():
                return function(request, mode=mode,*args, **kwargs)
            path = request.build_absolute_uri()
            # If the login url is the same scheme and net location then just
            # use the path as the "next" url.
            login_scheme, login_netloc = urlparse.urlparse(login_url or
                                                        settings.LOGIN_URL)[:2]
            current_scheme, current_netloc = urlparse.urlparse(path)[:2]
            if ((not login_scheme or login_scheme == current_scheme) and
                (not login_netloc or login_netloc == current_netloc)):
                path = request.get_full_path()
            from django.contrib.auth.views import redirect_to_login
            return redirect_to_login(path, login_url, redirect_field_name)
        return wrapped_func
    
    这里是
    设置。移动登录URL
    /mob/profile/LOGIN/
    设置。登录URL
    /profile/LOGIN/

    在这里,我使用了函数
    django.contrib.auth.decorators.user\u通过了相关修改后的测试
    。但我仍然不知道我们如何重用django内置的decorator
    @login\u required