我正在尝试做的事情:
我正在尝试访问 django 模型中的请求对象,以便我可以使用request.user.
我尝试过的:
我在这个网站上发现了一个黑客。但是评论中有人指出在生产时不要这样做。
我也尝试__init__像这篇文章中提到的那样覆盖模型的方法。但我得到了一个AttributeError: 'RelatedManager' object has no attribute 'request'
模型.py:
class TestManager(models.Manager):
def user_test(self):
return self.filter(user=self.request.user, viewed=False)
class Test(models.Model):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(Test, self).__init__(*args, **kwargs)
user = models.ForeignKey(User, related_name='test')
viewed = models.BooleanField(default=False)
objects = TestManager()
Run Code Online (Sandbox Code Playgroud) 我想在 django 中实现一个中间件,它将在get_response(request)函数之前在请求的现有标头上附加一个标头。
不过,当这样尝试时:
request.headers['CUSTOM_HEADER'] = 'CUSTOM_VALUE'
Run Code Online (Sandbox Code Playgroud)
我收到错误:'HttpHeaders'对象不支持项目分配
另外,在django的请求(WSGIRequest)中,没有像python的请求模块那样的add_headers函数。
关于如何实现这一点有什么想法吗?
我有一个域名的网站www.example1.com,最近我已经指出另一个域DNSwww.example2.com到包含www.example1.com同一台服务器,这样既www.example1.com和www.example2.com服务相同的代码,但域名应该是不同的,我想从Django的请求获得域名如下
def homepage(request):
domain = request.META['HTTP_HOST']
if domain == 'www.example1.com':
return HTTPResponseReredirect('/new/')
elif domain == 'www.example2.com':
return HTTPResponseReredirect('/old/')
Run Code Online (Sandbox Code Playgroud)
所以基于域名,我想将用户重定向到不同的网页,但每次我使用request.META['HTTP_HOST']输出时都是一个 IP 地址127.0.0.1:8001,如下所示
META:{'HTTP_ACCEPT': ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8’,
'HTTP_ACCEPT_ENCODING': 'gzip, deflate, sdch, br',
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8',
'HTTP_CONNECTION': 'close',
'HTTP_COOKIE': 'sessionid=xxxxxxxxxxxxxxxx; ',
'HTTP_HOST': '127.0.0.1:8001',
'HTTP_UPGRADE_INSECURE_REQUESTS': '1',
'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'PATH_INFO': u'/',
'QUERY_STRING': '',
'RAW_URI': '/',
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_PORT': '41280',
'REQUEST_METHOD': 'GET',
'SCRIPT_NAME': u'',
'SERVER_NAME': …Run Code Online (Sandbox Code Playgroud) HttpRequest.is_ajax() 方法已被弃用,因为它依赖于 jQuery 特定的方式来表示 AJAX 调用,而当前的使用倾向于使用 JavaScript Fetch API。根据您的用例,您可以编写自己的 AJAX 检测方法,或者如果您的代码依赖于客户端 Accept HTTP 标头,则可以使用新的 HttpRequest.accepts() 方法。
我目前正在开发 Django 应用程序,并且尝试将当前用户设置为模型上的默认用户,但它不起作用。
created_by = models.ForeignKey(User, default=request.user, null=True, blank=True, on_delete=models.DO_NOTHING, related_name='created_by')
Run Code Online (Sandbox Code Playgroud)
我尝试重写 save() 方法,但它也不起作用,有人对此事有任何经验吗?
预先非常感谢您的帮助