我们在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) 我使用的是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) 我刚刚从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) 我正在开始一个新的应用程序,并且我正在尽力接受基于类的视图。啊啊,成长的烦恼。我试图在这里从 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) 我有这个正则表达式匹配加利福尼亚州北部的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)
但这不起作用.