python - 如何从 Django View 函数中的另一个函数返回
问题描述
我在views.py中有一个函数
def login(request):
actor = LoginActor(request)
actor.authenticated_user() # Cannot use return here, this is problematic, we need to redirect here without using a return statement
ctx = actor.get()
if request.method == 'POST':
ctx = actor.post()
return render(request, 'user/forms/auth.jinja', ctx)
return render(request, 'user/login.jinja', ctx)
并且函数中有一个重定向,authenticated_user()
定义为:
def authenticated_user(self):
if self.request.user and self.request.user.is_authenticated:
return redirect('home')
如何在不调用 a 的情况下从初始视图返回return
,基本上我想返回被调用函数,其中有一个return
in 被调用函数我正在使用 Django 2.1 和 Python 3.7
解决方案
您应该将渲染和重定向都留给视图函数,并让您的实用程序函数authenticated_user
只返回一个布尔值:
def authenticated_user(self):
return self.request.user and self.request.user.is_authenticated
def login(request):
actor = LoginActor(request)
if actor.authenticated_user():
return redirect('home')
ctx = actor.get()
if request.method == 'POST':
ctx = actor.post()
return render(request, 'user/forms/auth.jinja', ctx)
return render(request, 'user/login.jinja', ctx)
推荐阅读
- javascript - 更改值时Vue v-show不呈现
- image - 图像 tintColor React-Native 中的线性渐变
- django - 主管启动 celery worker,生成它并以状态码退出(退出状态 1;不是预期的)
- laravel - 布局问题请看附件
- c++ - 如何在 gcc 窗口中使用 SFML
- c++ - 如果 x,递归不起作用,我的函数只能删除第一个元素
- html - 无法覆盖用户代理样式表
- java - 结合从 JSON 加载的两个地图块
- xamarin - System.Serialization Exception ===> Vimeo 视频无法在 Xamarin.forms App 上的 IOS/Android 上播放
- c# - 为什么“dotnet msbuild”在第一次运行时会失败并出现警告,然后第二次运行成功?