这有点与这个问题有关
为什么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)
显然有很多其他的排列,但我认为我的意图很明确.
提前致谢.
因此谷歌搜索似乎普遍的共识是在REST URI中嵌入版本号是一种不好的做法,也是一个坏主意.
即便如此,也有强有力的支持者支持这一点.
例如,API版本控制的最佳实践?
我的问题是如何在django-rest-framework中完成使用accept header/content negotiation的提议解决方案来实现这一目标.
看起来框架中的内容协商,
http://django-rest-framework.org/api-guide/content-negotiation/
已经配置为根据接受的MIME类型自动返回预期值.如果我开始使用自定义类型的Accept标头,我将失去框架的这种好处.
有没有更好的方法在框架中实现这一目标?
当我有类似以下的东西
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启动但尚未完成时执行.
我究竟做错了什么?
我正在考虑使用pipenv并在这里的文档中
https://pipenv.readthedocs.io/en/latest/basics.html#importing-from-requirements-txt
它说(强调我的)
请注意,在导入需求文件时,它们通常会固定版本号,这可能是您不想要的
为什么是这样?
据我所知,Pipfile.lock文件将存储我安装的依赖项的特定版本和哈希,但我不希望能够看到Pipfile中安装的特定版本?(当我使用requirements.txt时,我的方式相同?)
我无法在文档或互联网上找到此信息.
最新的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,所以我可以检索一个查询集,其中每个实例已经是适当的子类的实例.
谢谢
我在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中的所有位置,请求作为额外的一部分显式传入.
请求显式传入请求作为额外的一部分?
我想要一个视图来返回图像数据.所以有些东西
return HttpResponse(image_data, mimetype=”image/png”)
Run Code Online (Sandbox Code Playgroud)
我知道我可以做一个file.read()
来获取图像数据,但因为图像很小(比如1x1 px)我想把它存储为一个字符串对象(或者我可以复制并粘贴到我的代码中的任何对象).这样,每次查看视图时,我都会自行保存磁盘查找.
我该怎么做?我确信这很简单,我只是不确定用于搜索的术语.
ps我知道一个人通常不会用Django以这种方式提供图像.
不确定我是否使用了正确的词汇.在django-rest-framework免费提供的可浏览api中,我想知道是否有一种方法可以自动生成类似于我们定义ModelForms的表单.这将允许我们在某些情况下更容易测试API的输入.我目前正在使用ModelSerializers和通用视图APIView,以防万一.
我已经阅读了文档(此时已多次),但在任何地方都没有看到它.
我正在尝试使用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的新手,只是尝试了几个简单的实验来弄湿我的脚.我正在运行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,但它有效..
有没有更好的方法来做我想做的事情?
这样做有什么缺点吗?
谢谢
python ×7
django ×6
django-admin ×2
api ×1
binary ×1
celery ×1
django-forms ×1
forms ×1
httpresponse ×1
logging ×1
mod-wsgi ×1
pip ×1
pipenv ×1
python-2.7 ×1
rest ×1