我犯了一个错误,并将我的Django项目SECRET_KEY提交到公共存储库中.
根据文档https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY,这个密钥应该保密.
Django项目是实时的,并且已经与一些活跃的用户运行了一段时间.如果我改变了有SECRET_KEY什么影响?任何现有用户,cookie,会话等都会受到影响吗?显然,新的SECRET_KEY将不再存储在公共场所.
升级到Django 1.5后,我开始收到这样的错误:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 92, in get_response
response = middleware_method(request)
File "/usr/local/lib/python2.7/dist-packages/django/middleware/common.py", line 57, in process_request
host = request.get_host()
File "/usr/local/lib/python2.7/dist-packages/django/http/request.py", line 72, in get_host
"Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): %s" % host)
SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): www.google.com
<WSGIRequest
path:/,
GET:<QueryDict: {}>,
POST:<QueryDict: {}>,
COOKIES:{},
META:{'CONTENT_LENGTH': '',
'CONTENT_TYPE': '',
'DOCUMENT_ROOT': '/etc/nginx/html',
'HTTP_ACCEPT': 'text/html',
'HTTP_HOST': 'www.google.com',
'HTTP_PROXY_CONNECTION': 'close',
'HTTP_USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT …Run Code Online (Sandbox Code Playgroud) 我有一个托管= False的模型.
class SampleModel(models.Model):
apple = models.CharField(max_length=30)
orange = models.CharField(max_length=30)
class Meta:
managed = False
Run Code Online (Sandbox Code Playgroud)
我有一个单元测试,它创建了一个SampleModel,但是当我运行测试时,我得到:
DatabaseError: no such table: SAMPLE_SAMPLE_MODEL
Run Code Online (Sandbox Code Playgroud)
django文档 - https://docs.djangoproject.com/en/dev/ref/models/options/#managed记录以下内容:
对于涉及托管= False的模型的测试,由您来确保在测试设置中创建正确的表.
如何在测试设置期间实际"创建"表格?或者,我怎样才能使它在运行测试时,在测试期间该模型具有"managed = True"?
在实际应用程序中,此模型实际上由数据库中的视图支持.但是对于测试期间,我想将其视为一个表,并能够在那里插入测试数据.
当我运行它时,我有一个单元测试正在通过python manage.py test,但是当我从PyCharm中运行它时失败了.
def test_alpha(self):
from selenium.webdriver.common.utils import free_port
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH, port=free_port())
driver.quit()
Run Code Online (Sandbox Code Playgroud)
从PyCharm运行时遇到的异常是
WebDriverException: Message: 'Can not connect to GhostDriver'
Run Code Online (Sandbox Code Playgroud)
我花了相当多的时间来研究这个问题,我注意到当我手动指定一个端口时,测试在PyCharm中传递.
# suppose 50000 happens to be a free port on your computer
driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH, port=50000)
Run Code Online (Sandbox Code Playgroud)
快速回顾一下:
python manage.py testport=free_port()PyCharm做的是让测试无法连接到Ghostdriver?
# For convenience, the `free_port()` code snippet is here
# selenium.webdriver.common.utils.freeport
def free_port():
free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
free_socket.bind(('127.0.0.1', 0))
free_socket.listen(5)
port = free_socket.getsockname()[1]
free_socket.close()
return port
Run Code Online (Sandbox Code Playgroud) 我有一个名单,例如:
name_list = ['Alpha', 'bEtA', 'omegA']
Run Code Online (Sandbox Code Playgroud)
目前我有以下查询集:
MyModel.objects.filter(name__in=name_list)
Run Code Online (Sandbox Code Playgroud)
我希望能够以不区分大小写的方式过滤名称.我的第一个想法是使用iexact字段查找但它似乎不起作用in.我如何使用iexact与in现场查找我的查询集?或者是否有另一种方法来执行此查询?
我正在尝试使用我正在使用以下命令开发的Django应用程序使用Gunicorn中的gaiohttp工作程序:
gunicorn -k gaiohttp -b localhost:8080 myproject.wsgi
Run Code Online (Sandbox Code Playgroud)
我的最终目标是能够同时处理请求 - 即让1名gunicorn工作者同时处理多个请求.有I/O绑定操作使这些请求变慢.
我知道当我处理请求时,事件循环已经在运行:
class MyView(View):
def get(self, request):
loop = asyncio.get_event_loop()
loop.is_running() # True
...
Run Code Online (Sandbox Code Playgroud)
问题:
如何yield from asyncio.sleep(10)在视图代码中执行操作?
class MyView(View):
def get(self, request):
# Raises AssertionError: yield from wasn't used with future
yield from asyncio.sleep(10)
Run Code Online (Sandbox Code Playgroud)我可以向事件循环添加任务,但是在处理请求时它们不会阻塞
@asyncio.coroutine
def simulate_work():
yield from asyncio.sleep(10)
class MyView(View):
def get(self, request):
# This runs simulate_work(), however, it doesn't block
# the response is returned before simulate_work() is finished
loop = asyncio.get_event_loop()
task = …Run Code Online (Sandbox Code Playgroud)我想编写单元测试来测试两个python包之间是否存在依赖关系.例如:
a/
__init__.py
models.py
views.py
...
b/
__init__.py
models.py
views.py
...
Run Code Online (Sandbox Code Playgroud)
单元测试,检查包中的模块是否从包中的模块b导入任何内容a.到目前为止,我唯一的解决方案是扫描文件并检查源代码中是否没有"from a"或"import a".还有其他方法吗?其中一个要求是,a/并且b/必须位于相同的目录级别.
我想有这个单元测试,因为我想确保我可以b在没有包的其他项目中使用包a,也没有其他开发人员编写将b依赖的代码a.
我有以下 nginx 配置:
http {
... <content removed for bevity> ...
# Cloudflare
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
real_ip_header CF-Connecting-IP;
upstream myproject {
server unix:/var/www/myproject/gunicorn.sock fail_timeout=0;
}
server {
listen XXX;
server_name XXXXXX;
... <content removed for bevity> ...
location / {
proxy_set_header HOST $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect …Run Code Online (Sandbox Code Playgroud) 我正在以这种方式使用@login_required装饰器:
@login_required(login_url=reverse_lazy('login'))
def my_view:
Run Code Online (Sandbox Code Playgroud)
现在我知道我可以在设置中指定登录URL,但这不是我的问题.事情是在它重定向到我的"登录"URL之后,它会附加?next=到它,如下所示:
http://whatever.com/login/?next=/fakeurl/
Run Code Online (Sandbox Code Playgroud)
我不想要它.有没有办法覆盖这个?谢谢.
我编写了一个简单的应用程序(让我们称之为应用程序Foo),它是开源的,并在GPLv3下获得许可.(我有意识地决定使用GPLv3,我是这个应用程序的唯一作者)
题
如果我写另一个应用程序(让我们称之为这个应用程序Bar)并Bar使用Foo,我是否需要开源,Bar因为它Foo是根据GPL许可的?由于我是GPL应用程序的作者,我可以在没有开源的情况下使用它Bar吗?
或者,我是否允许仅使用GPL进行公开发布,Foo并且还Foo为那些不想Foo通过以不同许可证出售来开源应用程序的人收费?
django ×8
python ×5
unit-testing ×3
gunicorn ×2
cloudflare ×1
dependencies ×1
django-orm ×1
gpl ×1
licensing ×1
nginx ×1
phantomjs ×1
pycharm ×1