小编Der*_*wok的帖子

改变Django的SECRET_KEY的影响

我犯了一个错误,并将我的Django项目SECRET_KEY提交到公共存储库中.

根据文档https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY,这个密钥应该保密.

Django项目是实时的,并且已经与一些活跃的用户运行了一段时间.如果我改变了有SECRET_KEY什么影响?任何现有用户,cookie,会话等都会受到影响吗?显然,新的SECRET_KEY将不再存储在公共场所.

django

184
推荐指数
4
解决办法
3万
查看次数

Django的SuspiciousOperation无效的HTTP_HOST标头

升级到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)

django

89
推荐指数
4
解决办法
6万
查看次数

如何在使用managed = False的Django测试期间创建表

我有一个托管= 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 django unit-testing

32
推荐指数
3
解决办法
8928
查看次数

PyCharm无法连接到GhostDriver

当我运行它时,我有一个单元测试正在通过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 test
  • 如果手动指定端口,则测试在PyCharm中传递
  • 如果,PyCharm中的测试失败 port=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)

python unit-testing pycharm phantomjs selenium-webdriver

21
推荐指数
1
解决办法
1960
查看次数

如何链接Django的"in"和"iexact"查询集字段查找?

我有一个名单,例如:

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.我如何使用iexactin现场查找我的查询集?或者是否有另一种方法来执行此查询?

django django-orm

14
推荐指数
2
解决办法
4093
查看次数

使用带有asyncio的gunicorn时如何屈服于另一个请求?

我正在尝试使用我正在使用以下命令开发的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)

问题:

  1. 如何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)
  2. 我可以向事件循环添加任务,但是在处理请求时它们不会阻塞

    @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 django gunicorn python-asyncio

10
推荐指数
1
解决办法
2398
查看次数

使用Python进行依赖性测试

我想编写单元测试来测试两个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.

python django dependencies unit-testing

6
推荐指数
1
解决办法
699
查看次数

使用 Nginx 和 CloudFlare 时如何将真实 IP 传递给 Gunicorn?

我有以下 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)

django nginx gunicorn cloudflare

5
推荐指数
1
解决办法
2472
查看次数

使用@login_required而不在URL中附加"?next = /"

我正在以这种方式使用@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)

我不想要它.有没有办法覆盖这个?谢谢.

python django url-redirection

4
推荐指数
1
解决办法
499
查看次数

我是GPL申请的作者,我可以在不同的许可下出售吗?

我编写了一个简单的应用程序(让我们称之为应用程序Foo),它是开源的,并在GPLv3下获得许可.(我有意识地决定使用GPLv3,我是这个应用程序的唯一作者)

如果我写另一个应用程序(让我们称之为这个应用程序Bar)并Bar使用Foo,我是否需要开源,Bar因为它Foo是根据GPL许可的?由于我是GPL应用程序的作者,我可以在没有开源的情况下使用它Bar吗?

或者,我是否允许仅使用GPL进行公开发布,Foo并且还Foo为那些不想Foo通过以不同许可证出售来开源应用程序的人收费?

licensing gpl

3
推荐指数
1
解决办法
319
查看次数