python – 创建一个虚假的请求,将视图呈现给django中的字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 创建一个虚假的请求,将视图呈现给django中的字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1844字,纯文字阅读大概需要3分钟。
内容图文
![python – 创建一个虚假的请求,将视图呈现给django中的字符串](/upload/InfoBanner/zyjiaocheng/791/93cc7dcfadba493a9d6e4324879d3362.jpg)
问题
我想通过在另一个视图中调用视图(捕获响应并提取呈现的内容)到一个字符串来呈现任意视图.
问题是我想在呈现该视图期间让虚拟用户“登录”,同时更改请求中的一些其他小事.
我想避免的是完全从头开始构建请求,因为在父视图中我将拥有的90%的请求将是相同的.
我想知道就最佳实践而言,以及技术方面我应该如何处理这个问题?
我现在正在考虑这样的事情:(但我忍不住觉得这太可怕了,必须有一个更好的方法,我想不起来)
View stuff…
Log current user out
Create/Login dummy user
Somehow modify request a bit
Render view to string
Log out dummy user
Log back in original user
End of view stuff…
有任何想法吗?或指向更好方向的指针?
谢谢,
dennmat
解决方法:
您实际上不需要记录当前用户,您只需更改计划用于呈现其他视图的HttpRequest对象中的用户.你可以这样做:
from django.contrib.auth.models import User
from django.http import HttpResponse
def view_inside_a_view(request):
return HttpResponse('hello %s' % request.user)
def view(request):
# change to dummy user, or whoever
request.user = User.objects.get(id=1)
response = view_inside_a_view(request)
return HttpResponse('rendered view: %s' % response.content)
如果您需要登录您的虚拟用户,您可以使用django.contrib.auth.authenticate或django.contrib.auth.login来执行此操作.使用登录的示例(避免使用虚拟用户密码的必要性):
from django.contrib.auth.models import User
from django.contrib.auth import login, get_backends
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
@login_required
def view_inside_a_view(request):
return HttpResponse('hello %s' % request.user)
def view(request):
# login dummy user
user = User.objects.get(id=2)
backend = get_backends()[0]
user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
login(request, user)
# change request's user
request.user = user
# get response from view
response = view_inside_a_view(request)
return HttpResponse('rendered view: %s' % response.content)
内容总结
以上是互联网集市为您收集整理的python – 创建一个虚假的请求,将视图呈现给django中的字符串全部内容,希望文章能够帮你解决python – 创建一个虚假的请求,将视图呈现给django中的字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。