我做了一个很好的表单,还有一个非常复杂的“添加”function来处理它。 像这样开始… def add(req): if req.method == 'POST': form = ArticleForm(req.POST) if form.is_valid(): article = form.save(commit=False) article.author = req.user # more processing … 现在我真的不想在edit()方法中复制所有的function,所以我想edit可以使用完全相同的模板,也许只是添加一个id字段到表单,所以add函数知道它正在编辑。 但是这有几个问题 我将在哪里add func的article.id ? 它必须在form.save之后,因为这是创build文章的地方,但它永远不会达到这个目的,因为由于唯一约束(除非用户编辑所有内容),表单是无效的。 我可以删除is_valid检查,但是然后form.save失败。 如果表单实际上是无效的,我不会保留在编辑function中dynamic添加的字段。 那我该如何处理呢?
我正在使用Django Rest Framework构build一个API。 后来这个API应该被iOS和Android设备使用。 我想让我的用户与Facebook和Google等oauth2提供商签约。 在这种情况下,他们根本不需要在我的平台上创build帐户。 但是用户也应该可以在没有Facebook / Google帐户的情况下注册,因为我使用的是django-oauth-toolkit,所以我有自己的oauth2-provider。 对于外部提供者,我使用python-social-auth,它工作正常并自动创build用户对象。 我希望客户端通过使用持有者令牌进行身份validation,对于与我的提供者签约的用户(django-oauth-toolkit为Django REST Framework提供身份validationscheme和权限类),这些用户可以正常工作。 但是,python-social-auth只实现基于会话的authentication,所以没有直接的方法来代表外部oauth2提供者注册的用户进行authentication的API请求。 如果我使用由django-oauth-toolkit生成的access_token,请执行如下的请求: curl -v -H "Authorization: Bearer <token_generated_by_django-oauth-toolkit>" http://localhost:8000/api/ 但是,以下方法不起作用,因为Django REST Framework没有相应的authenticationscheme,而python-social-auth提供的AUTHENTICATION_BACKENDS仅适用于基于会话的authentication: curl -v -H "Authorization: Bearer <token_stored_by_python-social-auth>" http://localhost:8000/api/ 在使用python-social-auth进行身份validation后,使用Django REST Framework提供的可浏览的API工作得很好,只有没有会话cookie的API调用不起作用。 我想知道什么是最好的办法是这个问题。 我看到的方式基本上有两种select: 答:当用户使用外部oauth2提供程序注册(由python-social-auth处理)时,挂接进程以创buildoauth2_provider.models.AccessToken,并继续使用'oauth2_provider.ext.rest_framework.OAuth2Authentication' ,现在进行身份validation还有向外部提供商注册的用户。 这里build议使用此方法: https : //groups.google.com/d/msg/django-rest-framework/ACKx1kY7kZM/YPWFA2DP9LwJ B:使用python-social-auth进行API请求authentication。 我可以通过编写一个自定义的后端和使用register_by_access_token将我自己的用户变成python-social-auth。 但是,由于API调用不能使用Django会话,这意味着我将不得不为Django Rest Framework编写一个validationscheme,该scheme利用python-social-auth存储的数据。 有关如何做到这一点的指针可以在这里find: http://psa.matiasaguirre.net/docs/use_cases.html#signup-by-oauth-access-token http://blog.wizer.fr/2013/11/angularjs-facebook-with-a-django-rest-api/ http://cbdev.blogspot.it/2014/02/facebook-login-with-angularjs-django.html 然而,我了解python-social-auth的方式只是在进行login时validation令牌,然后依赖于Django会话。 这意味着我将不得不find一种方法来防止python-social-auth为每个无状态API请求执行整个oauth2-flow,而是检查存储在数据库中的数据,这对于查询并不是真正优化的,因为它是存储为JSON(我可以使用UserSocialAuth.objects.get(extra_data__contains =)虽然)。 […]
我使用Django和Apache来提供网页。 我的JavaScript代码当前包含一个数据对象,其值将根据用户从选项菜单中的select,显示在各种HTML小部件中。 我想从Python字典中派生这些数据。 我想我知道如何在HTML中embeddedJavaScript代码,但是如何将数据对象embedded到该脚本中(即时),以便脚本的function可以使用它? 换一种说法,我想从Python字典创build一个JavaScript对象或数组,然后将该对象插入到JavaScript代码中,然后将该JavaScript代码插入到HTML中。 我想这个结构(例如embedded在JavaScript代码中的variables中的数据)是次优的,但作为新手我不知道替代scheme。 我已经看过Django序列化函数的书写,但是直到我可以将数据放入我的JavaScript代码中,这些function并没有帮助。 我还没有使用像jQuery这样的JavaScript库。
我的模型 – > class Sample(models.Model): users = models.ManyToManyField(User) 我想这样做(在这个模型中保存用户,user1和user2) – > user1 = User.objects.get(pk=1) user2 = User.objects.get(pk=2) sample_object = Sample( users = user1, users=user2 ) sample_object.save() 我知道这是错误的:D,但我相信你得到了我想要做的事情…那么你会怎么做呢?
[我已经发布在Django用户| Google网上论坛也是。] 使用内嵌表单文档中的示例,我可以编辑属于特定模型的对象(使用模型)。 我一直试图按照相同的模式来创build使用内联窗体的新对象,但一直没有足够清晰的头脑为此目的提出一个工作的看法。 使用与上述链接相同的示例,我将如何创build“作者”模型的新实例以及相关的“书籍”对象?
我有Django的staticfiles应用程序的一个小问题。 我已经添加了 'django.contrib.staticfiles', 到我的INSTALLED_APPS并添加 STATIC_URL = '/static/' STATIC_ROOT = '/Users/kevdotbadger/django/mylook/static/' 到我的settings.py文件。 我所有的静态文件都位于Mac的STATIC_ROOT文件夹中。 现在,我使用我的模板 {{ STATIC_URL }} 正确呈现给/static/ 。 然而 {{ STATIC_URL }}css/style.css 导致404错误。 我使用'runserver'命令作为服务器。 有什么我失踪?
我如何获得Django将在QuerySet对象的数据库上使用的SQL? 我试图debugging一些奇怪的行为,但我不知道什么查询将数据库。 谢谢你的帮助。
我还没有find一种方法来设置Django的Python日志logging,我很满意。 我的要求相当简单: 针对不同事件的不同日志处理程序 – 也就是说,我希望能够login到不同的文件 轻松访问我的模块中的logging器。 模块应该能够很轻松地find它的logging器。 应该很容易适用于命令行模块。 系统的一部分是独立的命令行或守护进程。 logging应该很容易与这些模块一起使用。 我目前的设置是使用logging.conf文件和安装日志logging在我login的每个模块中。 这感觉不对。 你有一个你喜欢的日志logging设置? 请详细说明一下:您如何设置configuration(您是使用logging.conf还是使用代码设置),您何时/何时启动logging器,以及如何在模块中访问它们等。
我需要从Django shell执行一个Python脚本。 我试过了 ./manage.py shell << my_script.py 但它没有工作。 这只是在等我写点东西。
在render() , render_to_response()和direct_to_template()之间的视图中有什么区别(在python / django noob语言中可以理解direct_to_template() ? 例如来自Nathan Borror的基本应用程序示例 def comment_edit(request, object_id, template_name='comments/edit.html'): comment = get_object_or_404(Comment, pk=object_id, user=request.user) # … return render(request, template_name, { 'form': form, 'comment': comment, }) 但我也看到了 return render_to_response(template_name, my_data_dictionary, context_instance=RequestContext(request)) 和 return direct_to_template(request, template_name, my_data_dictionary) 有什么区别,在特定情况下使用什么?