小编w--*_*w--的帖子

每个应用程序的django设置 - 最佳实践?

这有点与这个问题有关
为什么django的设置对象是一个LazyObject?

在我的django项目中,我有几个应用程序.每个应用程序都可以拥有自己的非平凡设置文件.

proj/
    proj/
         settings.py
    app/
         settings.py
         views.py
Run Code Online (Sandbox Code Playgroud)

这里的一般最佳做法是什么?
app/settings.py应该这样做

from django.conf import settings
APP_SETTING= lambda: settings.getattr('APP_SETTING', 'custom_value')
PROJ_SETTING= lambda: settings.PROJ_SETTING
Run Code Online (Sandbox Code Playgroud)

然后在app/views.py中

import .settings 
X = settings.APP_SETTING
Y = settings.PROJ_SETTING
Run Code Online (Sandbox Code Playgroud)

或者我应该根据django编码风格修改app/settings.py中的django lazy设置对象?

from django.conf import settings
# not even sure how I would check for a default value that was specified in proj/settings.py
settings.configure(APP_SETTING='custom_value')
Run Code Online (Sandbox Code Playgroud)

然后每个app/views.py只通过django.conf设置消耗proj/settings.py?

from django.conf import settings
X = settings.APP_SETTING
Y = settings.PROJ_SETTING
Run Code Online (Sandbox Code Playgroud)

显然有很多其他的排列,但我认为我的意图很明确.
提前致谢.

python django django-settings

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

django-rest-framework:api版本控制

因此谷歌搜索似乎普遍的共识是在REST URI中嵌入版本号是一种不好的做法,也是一个坏主意.

即便如此,也有强有力的支持者支持这一点.
例如,API版本控制的最佳实践?

我的问题是如何在django-rest-framework中完成使用accept header/content negotiation的提议解决方案来实现这一目标.

看起来框架中的内容协商,
http://django-rest-framework.org/api-guide/content-negotiation/ 已经配置为根据接受的MIME类型自动返回预期值.如果我开始使用自定义类型的Accept标头,我将失去框架的这种好处.

有没有更好的方法在框架中实现这一目标?

python api django rest django-rest-framework

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

芹菜 - 链接组和子任务. - >乱序执行

当我有类似以下的东西

group1 = group(task1.si(), task1.si(), task1.si())
group2 = group(task2.si(), task2.si(), task2.si())

workflow = chain(group1, group2, task3.si())
Run Code Online (Sandbox Code Playgroud)

直观的解释是task3应该只在第2组中的所有任务完成后执行.

实际上,任务3在group1启动但尚未完成时执行.

我究竟做错了什么?

python celery django-celery

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

为什么版本号不能固定在Pipfile中?

我正在考虑使用pipenv并在这里的文档中
https://pipenv.readthedocs.io/en/latest/basics.html#importing-from-requirements-txt

它说(强调我的)

请注意,在导入需求文件时,它们通常会固定版本号,这可能是您不想要的

为什么是这样?

据我所知,Pipfile.lock文件将存储我安装的依赖项的特定版本和哈希,但我不希望能够看到Pipfile中安装的特定版本?(当我使用requirements.txt时,我的方式相同?)

python pip pipenv

17
推荐指数
2
解决办法
6225
查看次数

django-rest-framework,多表模型继承,ModelSerializers和嵌套序列化程序

我无法在文档或互联网上找到此信息.
最新的django-rest-framework,django 1.6.5

如何创建一个可以处理嵌套序列化器的ModelSerializer,其中嵌套模型是使用多重继承实现的?

例如

######## MODELS
class OtherModel(models.Model):
    stuff = models.CharField(max_length=255)

class MyBaseModel(models.Model):
    whaddup = models.CharField(max_length=255)
    other_model = models.ForeignKey(OtherModel)

class ModelA(MyBaseModel):
    attr_a = models.CharField(max_length=255)

class ModelB(MyBaseModel):
    attr_b = models.CharField(max_length=255)


####### SERIALIZERS
class MyBaseModelSerializer(serializers.ModelSerializer):
    class Meta:
        model=MyBaseModel

class OtherModelSerializer(serializer.ModelSerializer):
    mybasemodel_set = MyBaseModelSerializer(many=True)

    class Meta:
        model = OtherModel
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,但说明了我在这里要做的事情.
在OtherModelSerializer中,我希望mybasemodel_set根据我们拥有的内容序列化ModelA或ModelB的特定表示.

如果它很重要,我也使用django.model_utils和inheritencemanager,所以我可以检索一个查询集,其中每个实例已经是适当的子类的实例.

谢谢

python django django-models django-rest-framework

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

django logging - django.request记录器和额外的上下文

我在django 1.3.,python 2.6

在这里的django文档
https://docs.djangoproject.com/en/1.3/topics/logging/#django-request中
它说消息具有以下额外的上下文:状态和请求.
如何让这些显示在调试文件中?我在我的日志配置中试过类似的东西:

'formatters': {        
        'simple_debug': {
            'format': '[%(asctime)s] %(levelname)s %(module)s %(message)s %(request.user)s',        
        }
    },
Run Code Online (Sandbox Code Playgroud)

但这会导致整体日志记录失败(即没有记录输出)


编辑: 所以我提交问题后立即发现了这个问题:http: //groups.google.com/group/django-users/browse_thread/thread/af682beb1e4af7f6/ace3338348e92a21

有人可以帮助解释/详述

来自文档的所有引用实际上意味着使用django.request的django中的所有位置,请求作为额外的一部分显式传入.

请求显式传入请求作为额外的一部分?

python django logging django-settings

13
推荐指数
2
解决办法
7947
查看次数

django:从视图返回图像数据

我想要一个视图来返回图像数据.所以有些东西

return HttpResponse(image_data, mimetype=”image/png”)
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一个file.read()来获取图像数据,但因为图像很小(比如1x1 px)我想把它存储为一个字符串对象(或者我可以复制并粘贴到我的代码中的任何对象).这样,每次查看视图时,我都会自行保存磁盘查找.

我该怎么做?我确信这很简单,我只是不确定用于搜索的术语.

ps我知道一个人通常不会用Django以这种方式提供图像.

python django binary httpresponse

12
推荐指数
1
解决办法
8829
查看次数

django-rest-framework - 可浏览API中的自动生成形式?

不确定我是否使用了正确的词汇.在django-rest-framework免费提供的可浏览api中,我想知道是否有一种方法可以自动生成类似于我们定义ModelForms的表单.这将允许我们在某些情况下更容易测试API的输入.我目前正在使用ModelSerializers和通用视图APIView,以防万一.

我已经阅读了文档(此时已多次),但在任何地方都没有看到它.

截图

forms django-models python-2.7 django-rest-framework

11
推荐指数
2
解决办法
4639
查看次数

django model/modelForm - 如何在choiceField中获得动态选择?

我正在尝试使用django和内置管理界面.

我基本上希望在管理界面中有一个下拉字段.下拉选项应该是指定目录中可用的所有目录.
如果我定义这样的字段:

test_folder_list = models.FilePathField(path=/some/file/path)
Run Code Online (Sandbox Code Playgroud)

它显示了目录中的所有文件,但没有显示目录.

有谁知道我怎么能显示文件夹?

我也尝试过

test_folder_list = models.charField(max_length=100, choices=SOME_LIST)
Run Code Online (Sandbox Code Playgroud)

其中SOME_LIST是一个列表,我使用一些自定义代码填充以读取目录中的文件夹.这有效但不刷新.即,选择列表仅限于第一次运行应用程序时所有内容的快照.

提前致谢.


更新:
经过一些思考和研究后,我发现我想要的可能是
1.创建我自己的基于forms.ChoiceField的小部件

2.将我的文件夹列表传递给选择列表

1.我尝试了一个自定义小部件.我的模特看起来像

class Test1(models.Model):
    test_folder_ddl  = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

那么这是我的自定义小部件:

class FolderListDropDown(forms.Select):
 def __init__(self, attrs=None, target_path):
  target_folder = '/some/file/path'
  dir_contents = os.listdir(target_folder)
  directories = []
  for item in dir_contents:
   if os.path.isdir(''.join((target_folder,item,))):
    directories.append((item, item),)
  folder_list = tuple(directories)
  super(FolderListDropDown, self).__init__(attrs=attrs, choices=folder_list)
Run Code Online (Sandbox Code Playgroud)

然后我在我的modelForm中做了这个

class test1Form(ModelForm):
    test_folder_ddl  = forms.CharField(widget=FolderListDropDown())
Run Code Online (Sandbox Code Playgroud)

它似乎没有用.我的意思是django不想使用我的小部件,而是渲染你使用CharField时得到的默认textinput.

对于2.我在我的ModelForm尝试这个

class test1Form(ModelForm):
    test_folder_ddl = …
Run Code Online (Sandbox Code Playgroud)

django-models django-forms django-admin drop-down-menu

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

django - 使用基本身份验证保护一些Web路径

我是django的新手,只是尝试了几个简单的实验来弄湿我的脚.我正在运行django 1.0,apache2 prefork和mod_wsgi.我正在尝试使用以下url结构构建一个站点

/
/members
/admin
Run Code Online (Sandbox Code Playgroud)

根基本上是一个公共区域.
应使用基本身份验证(可能由apache进行身份验证)保护成员路径,应
使用内置的django身份验证来保护管理路径.

按照文档中的示例,我基本上可以使用基本身份验证保护整个站点,但这不是我想要的.

除了虚拟主机配置:

WSGIScriptAlias / /django/rc/apache/django.wsgi
<Directory /django/rc/apache>
AuthType Basic
AuthName "Authentication Required"
AuthUserFile "/django/_HTPASSWD/.htpasswd"
Require valid-user

# Order allow,deny
# Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我指出正确的方向(或告诉我= P)如何使这成为可能?

谢谢


编辑:玩了一下我发现我可以做的事情:

WSGIScriptAlias / /django/rc/apache/django.wsgi
<Directory /django/rc/apache>
Order allow,deny
Allow from all
</Directory>

WSGIScriptAlias /members /django/rc/apache_httpauth/django.wsgi
<Directory /django/rc/apache_httpauth>
AuthType Basic
AuthName "Authentication Required"
AuthUserFile "/django/_HTPASSWD/.htpasswd"
Require valid-user

</Directory>
Run Code Online (Sandbox Code Playgroud)

django.wsgi文件基本上是复制到另一个目录的同一文件,因此WSGIScriptAlias是不同的.这是hack-ish,但它有效..

有没有更好的方法来做我想做的事情?
这样做有什么缺点吗?

谢谢

django mod-wsgi basic-authentication django-admin

9
推荐指数
1
解决办法
4238
查看次数