我刚刚浏览了Django 1.9的alpha发行说明,发现startapp管理命令现在添加了一个apps.py文件.
这个文件的目的是什么?该的startApp文档并没有提供更多的信息.
我有一个像"asdfHRbySFss"的字符串,我想一次查看一个字符,看看哪些字母大写.我怎么能用Python做到这一点?
我正在使用一种名为 Astro ( https://astro.build/ ) 的新技术来构建一个完全静态的服务器端渲染页面,交付零 JS。
我有一个带有简单文本输入表单的页面,当用户填写该表单并单击提交按钮时,它会向 astro 页面发送 GET 请求。网址看起来像这样......
/?搜索=1234
我想要做的是访问该查询字符串参数,以便将我的用户重定向到另一个静态页面 /1234。
我尝试使用 Astro.request 访问 quesrystring 参数,但该对象(包括参数属性)完全为空。
是否有办法从 .astro 页面/文件访问查询字符串参数?
我执行我的Django项目自定义权限的应用程序,而我失去了对如何实现自定义的模板标签来检查用户的特定对象实例权限的记录并显示基于结果的一块HTML的支票.
我现在拥有的是(伪代码):
{% check_permission request.user "can_edit" on article %}
<form>...</form>
{% endcheck %}
Run Code Online (Sandbox Code Playgroud)
('check_permission'是我的自定义模板标记).
templatetag接受用户,权限和对象实例,并返回随附的HTML(表单).这目前工作正常.
然而,我想做的是:
{% if check_permission request.user "can_edit" on article %}
<form>...</form>
{% else %}
{{ article }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了有关赋值标记的内容,但我担心的是我会用此污染上下文变量空间(这意味着我可能会覆盖以前的权限上下文变量).换句话说,由于上下文变量是在不同的层次上定义的(视图,我的中间件,现在这个赋值模板标签),我担心可维护性.
关于如何找到一个干净的算法来执行以下操作,我有点不知所措:
假设我有一个字典k:
>>> k = {'A': 68, 'B': 62, 'C': 47, 'D': 16, 'E': 81}
Run Code Online (Sandbox Code Playgroud)
我现在想要根据它们在总(即总和)数量上的"权重"随机选择其中一个键.
>>> sum(k.values())
>>> 274
Run Code Online (Sandbox Code Playgroud)
所以有一个
>>> 68.0/274.0
>>> 0.24817518248175183
Run Code Online (Sandbox Code Playgroud)
选择A的变化率为24.81%.
你会如何编写一个能够解决这个问题的算法?换句话说,这确保在10.000随机选择中,A将被选择2.481倍?
我已经环顾四周了,我找到问题的答案还没有让我解决它.
我想使用孤立的virtualenv环境,但出于某种原因,virtualenv在django的shell中继续加载全局站点包...
我试图清理PATH变量,直到只剩下c:\ Python26\Scripts和c:\ Python26.然后我创建我的环境.
virtualenv --distribute --no-site-packages myproject
Run Code Online (Sandbox Code Playgroud)
然后我激活virtualenv.PATH现在(无关的vars报废):
PATH=E:\Development\django_projects\myproject\Scripts;C:\Panda3D-1.7.0\python;C:\Panda3D-1.7.0\bin;c:\python26\Scripts;
Run Code Online (Sandbox Code Playgroud)
PYTHONPATH=C:\Panda3D-1.7.0\
到现在为止还挺好.我启动python ...
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named django
Run Code Online (Sandbox Code Playgroud)
让我们尝试一个我确定在我的c:\ python site-packages目录中的模块.
>>> import BeautifulSoup
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named BeautifulSoup
Run Code Online (Sandbox Code Playgroud)
好极了!没有全球网站套餐!然后到下一个.在命令提示符下,我输入:
django-admin.py
Run Code Online (Sandbox Code Playgroud)
它的工作原理!但是等等......我还没有安装Django.这怎么可能?
在此之后,它变得更加怪异......我首先将这些添加到virtualenv的activate.bat脚本中,以便Django可以找到我的设置.
set PYTHONPATH=E:\Development\django_projects\myproject\
set DJANGO_SETTINGS_MODULE=settings.development
Run Code Online (Sandbox Code Playgroud)
现在我启动django-admin.py shell和
In [1]: import BeautifulSoup
In [2]: BeautifulSoup.__file__
Out[2]: 'C:\\Python26\\lib\\site-packages\\BeautifulSoup.pyc'
Run Code Online (Sandbox Code Playgroud)
这怎么可能呢?
闪光的洞察力
打字时,我突然明白了..py是一个文件扩展名,加上我的c:\ python26\python.exe可执行文件,而不是virtualenv文件!
python manage.py …Run Code Online (Sandbox Code Playgroud) 有没有人有任何使用PyCharm中的Django测试运行器的不同设置文件的经验?
我的项目组成如下:
+penguinproject
+apps
+settings
--__init__.py
--common.py # this one is imported by the others below
--development.py
--production.py
--staging.py
+static
...
Run Code Online (Sandbox Code Playgroud)
使用manage.py命令运行测试(并添加--settings = settings.development)工作正常,但我想使用内置的测试运行器(因为它更好地与IDE集成).
我认为问题是我的设置没有正确加载,因为我收到此错误:
E:\Development\django_projects\penguinproject\Scripts\python.exe "C:\Program Files (x86)\JetBrains\PyCharm 1.1\helpers\pydev\pydevd.py" --client 127.0.0.1 --port 49898 --file "C:\Program Files (x86)\JetBrains\PyCharm 1.1\helpers\pycharm\django_manage.py" test items
Testing started at 20:36 ...
pydev debugger: warning: psyco not available for speedups (the debugger will still work correctly, but a bit slower)
pydev debugger: starting
E:\Development\django_projects\penguinproject\lib\site-packages\path.py:32: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import …Run Code Online (Sandbox Code Playgroud) 我已升级到PyCharm 2.5,同时升级django-templated-email到0.4.3版本.
现在,Django单元测试不再通过PyCharm工作,因为我ImportError: cannot import name send_templated_mail在测试控制台输出中收到错误.
在控制台中运行相同的测试时,不会出现此错误.我觉得它与send_templated_email成为一部分有关templated_email\__init__.py(我依旧记得一次类似的问题,但不能为我的生活记住我是如何修复它的).
测试对话框中的设置为:
Target: <django app name>
Custom settings: <path to dev settings>
Environment variables: PYTHONPATH: <path as set in virtualenv>
Python interpreter: <virtualenv Python interpreter>
Interpreter options: None
Working directory: <path to Django project (where manage.py resides)>
Run Code Online (Sandbox Code Playgroud)
奇怪的是,IDE内的代码检查没有抱怨并templated_email正确加载模块from templated_email import send_templated_mail.
我正在使用Windows 7,而我的Django应用程序正在virtualenv中运行(PyCharm正确识别它).
在Python中,您可以使用这样的with语句(源代码):
class controlled_execution:
def __enter__(self):
# set things up
return thing
def __exit__(self, type, value, traceback):
# tear things down
with controlled_execution() as thing:
# some code
Run Code Online (Sandbox Code Playgroud)
在Flask/Jinja2中,使用flash消息的标准过程如下(源):
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<!-- do stuff with `message` -->
{% endfor %}
{% endif %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
我想知道{% with messages = get_flashed_messages() %}语法方面的工作原理.
我无法在纯Python中重新创建它:
with messages = get_flashed_messages(): pass 加薪 …在单元测试视图时,我似乎无法模拟表单的行为。
我的表单是一个简单的 ModelForm 并驻留在profiles.forms. 该视图(再次)是一个简单的视图,它检查表单是否有效然后重定向。
视图.py
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from profiles.forms import ProfileForm
def home(request):
form = ProfileForm()
if request.method == 'POST':
form = ProfileForm(request.POST)
if form.is_valid():
profile = form.save()
return HttpResponseRedirect(reverse("thanks"))
Run Code Online (Sandbox Code Playgroud)
我的测试是这样的:
class TestViewHomePost(TestCase):
def setUp(self):
self.factory = RequestFactory()
def test_form(self):
with mock.patch('profiles.views.ProfileForm') as mock_profile_form:
mock_profile_form.is_valid.return_value = True
request = self.factory.post(reverse("home"), data={})
response = home(request)
logger.debug(mock_profile_form.is_valid.call_count) # "0"
Run Code Online (Sandbox Code Playgroud)
is_valid 没有在模拟上被调用,这意味着 ProfileForm 没有被修补。
我在哪里做错了?
django ×5
python ×3
pycharm ×2
astrojs ×1
django-forms ×1
flask ×1
javascript ×1
jinja2 ×1
mocking ×1
node.js ×1
reactjs ×1
unit-testing ×1
virtualenv ×1
windows ×1