小编sco*_*ven的帖子

从UnitTest/WebTest运行Python/Django Management Command

我们在Django站点中有一堆命令,一些是管理命令,一些是在cron作业上运行的,我无法弄清楚如何测试.他们几乎看起来像这样:

# Saved in file /app/management/commands/some_command.py
# Usage: python manage.py some_command
from django.core.management.base import NoArgsCommand
class Command(NoArgsCommand):
    def handle_noargs(self, **options):
         # Do something useful
Run Code Online (Sandbox Code Playgroud)

我有一些测试,看起来像这样:

import unittest
from django.test import TestCase
from django_webtest import WebTest

class SomeTest(WebTest):
    fixtures = ['testdata.json']

    def setUp(self):
        self.open_in_browser = False
        # Set up some objects

    def test_registration(self):
        response = self.client.get('/register/')
        self.assertEqual(response.status_code, 200)
        form = self.app.get('/register/').forms[1]
        # Set up the form
        response = form.submit()
        self.assertContains(response, 'You are Registered.')
        if self.open_in_browser:
            response.showbrowser()

        # Here I'd like to …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing webtest

20
推荐指数
1
解决办法
8235
查看次数

mark_safe无法正常工作/仍在simple_tag中转义

我使用的是Django 1.3,我有一个simple_tag,我需要返回一些未转义的HTML,无论我做什么,它仍在&和 和我的| 到%7C。

from django import template
from django.template import loader, Context
from django.utils.safestring import mark_safe

register = template.Library()

@register.simple_tag()
def show_stuff(arg1=None, arg2=None, arg3='someconstant'):

    # Do some stuff

    if someconstant == 'somevalue':
        template_name = 'template1.html'
    else:
        template_name = 'template2.html'

    template = loader.get_template(template_name)
    html = template.render(Context( {'myvar': myvar,} ))
    html = mark_safe(html)
    print type(html)
    return html
Run Code Online (Sandbox Code Playgroud)

打印声明显示

<class 'django.utils.safestring.SafeUnicode'>
Run Code Online (Sandbox Code Playgroud)

从我的理解来看,这是不应该逃脱的。我在模板中调用该标签,如下所示:

{% show_stuff 'arg1' 'arg2' 'arg3' %}
Run Code Online (Sandbox Code Playgroud)

帮助将不胜感激。

更新:从下面的注释中尝试了以下内容。没有返回错误,但仍然转义了HTML:

    ...
    template = loader.get_template(template_name)
    html = template.render(Context( {'myvar': myvar,} ))
    html = …
Run Code Online (Sandbox Code Playgroud)

django django-templates

7
推荐指数
2
解决办法
7739
查看次数

Django,python,mod_wsgi和Apache工作者

我刚刚从apache prefork转移到worker并开始在守护进程模式下运行mod_wsgi.到现在为止还挺好.我还没有经历过最大负载,但是服务器似乎更加一致,我们没有看到随机请求花费2分钟等待mod_wsgi响应.内存占用已从3.5G增加到1G.这太棒了.我们使用6G内存的单个VPS运行.这个sevrer上运行了一个Django应用程序以及一个memcache实例,我们已经分配了1G内存.我们有一个单独的MySql服务器.

我们的应用程序很笨重,当然可以进行优化.我们现在正在使用NewRelic来解决一些运行速度较慢的页面.我已经阅读了很多关于优化mod_wsgi/apache的内容,但是和其他人一样,我还有几个问题.

我们的平均应用程序页面加载时间为650-750ms.我们的很多页面都在200毫秒范围内,但我们有一些狗需要2-5秒才能加载.我们在正常加载时间内可获得约15-20个请求/秒,在高峰时间可获得30-40个请求/秒,这可能持续30-60分钟.

这是我的apache配置,运行worker mpm.

StartServers        10
MaxClients         400
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
Run Code Online (Sandbox Code Playgroud)

我开始使用默认值(StatServers = 2和MaxClients = 150)但我们的网站在最小负载下减速.我猜测在请求进入时需要花费很长时间来启动服务器.我们从s3服务了90%的媒体.其他10%通过我们的https页面上的Apache或懒惰地指向我们的本地服务器的人提供.在标称负载下,最终会创建15个工作进程,所以我想我应该只设置StartServers = 15?有了这个配置,我假设我有15个工作进程在运行(我可以用NewRelic确认),每个进程有25个线程(我不知道如何确认,猜测400/15).

我的apache/mod_wsgi指令看起来像这样:

<VirtualHost *:80>
    # Some stuff
    WSGIDaemonProcess app1 user=http group=http processes=10 threads=20
    WSGIProcessGroup app1
    WSGIApplicationGroup app1
    WSGIScriptAlias / /path/to/django.wsgi
    WSGIImportScript /path/to/django.wsgi process-group=app1 application-group=app1    
    # Some more stuff    
</VirtualHost>

<VirtualHost *:443>
    # Some stuff
    WSGIDaemonProcess app1-ssl user=http group=http processes=2 threads=20
    WSGIProcessGroup app1-ssl
    WSGIApplicationGroup app1-ssl
    WSGIScriptAlias / /path/to/django.wsgi
    WSGIImportScript /path/to/django.wsgi process-group=app1-ssl application-group=app1-ssl
    # Some more stuff
</VirtualHost> …
Run Code Online (Sandbox Code Playgroud)

python apache django mod-wsgi

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

重写 Django 基于类的视图中的 get() 来进行过滤

我正在开始一个新的应用程序,并且我正在尽力接受基于类的视图。啊啊,成长的烦恼。我试图在这里从 GET 变量做一个简单的过滤器,如果它不存在,我想返回按 id desc 排序的所有对象,如果存在,我想过滤、排序并返回过滤后的列表。

我写了 30 多行代码来做到这一点,所以我一定做错了什么,对吧?我尝试重写 get_queryset() ,现在我想起来了,也许我应该在 get_queryset() 中调用 self.request.GET['search'] 来执行此过滤。是否有实现此目标的标准方法?

class MyModelList(AdminPageMixin, ListView):
    model = MyModel
    context_object_name = 'object'
    template_name = 'template/list.html'

    def get(self, request, *args, **kwargs):
        if 'search' in request.GET and len(request.GET['search']):
            search = request.GET['search']
            self.object_list = MyModel.objects.filter(advertiser__name=search).orderby('-id')
            context = self.get_context_data(object_list=self.object_list, search=search)
        else:
            self.object_list = MyModel.objects.all()
            context = self.get_context_data(object_list=self.object_list).orderby('-id')
        return self.render_to_response(context)

    def get_context_data(self, **kwargs):
        context = super(MyModelList, self).get_context_data(**kwargs)
        form = MyModelForm
        try:
            context['search'] = kwargs['search']
        except KeyError:
            pass
        context['form'] = form
        context['form_action'] …
Run Code Online (Sandbox Code Playgroud)

django django-class-based-views

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

Python正则表达式Zipcode匹配

我有这个正则表达式匹配加利福尼亚州北部的zipcodes.我想把它们变成一个正则表达式; 这可能吗?

(re.match(r'9[0-2].+', zip) or re.match(r'93[0-5].+', zip))
Run Code Online (Sandbox Code Playgroud)

我试过了:

re.match(r'9[0-2|3[0-5].+', zip)
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

python regex

2
推荐指数
1
解决办法
1510
查看次数