我已经阅读了Django Rest框架指南并完成了所有的教程。 一切似乎都是有道理的,并且应该如何工作。 我得到的基本和会话身份validation工作如上所述。 http://django-rest-framework.org/api-guide 然而,我正在努力处理文档中的令牌authentication部分,它有点缺乏,或者没有深入到教程中。 http://django-rest-framework.org/api-guide/authentication/#tokenauthentication 它说我需要为用户创build令牌,但是在models.py中指定哪里? 我的问题是: 有人可以解释第一次计时器的文档的令牌authentication部分更好一点吗?
我有一个关于处理m2m /通过模型及其在django rest框架中的表示的问题。 我们举一个经典的例子: models.py: from django.db import models class Member(models.Model): name = models.CharField(max_length = 20) groups = models.ManyToManyField('Group', through = 'Membership') class Group(models.Model): name = models.CharField(max_length = 20) class Membership(models.Model): member = models.ForeignKey('Member') group = models.ForeignKey('Group') join_date = models.DateTimeField() serializers.py: imports… class MemberSerializer(ModelSerializer): class Meta: model = Member class GroupSerializer(ModelSerializer): class Meta: model = […]
我正在使用Django Rest框架。 我不断收到一个错误 Exception Type: TemplateDoesNotExist Exception Value: rest_framework/api.html 我不知道我怎么会出错。 这是我第一次尝试使用REST框架。 这是代码。 views.py import socket, json from modules.data.models import * from modules.utils import * from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response from modules.actions.serializers import ActionSerializer @api_view(['POST']) @check_field_exists_wrapper("installation") def api_actions(request, format = None): action_type = request.POST['action_type'] if action_type == "Shutdown" : […]
我正在用Django和django-rest-framework构build一个RESTful API。 作为authentication机制,我们select了“Token Authentication”,我已经在Django-REST-Framework的文档中实现了它,问题是,应用程序是否应该定期更新/更改令牌,如果是的话,是怎么做的? 应该是移动应用程序需要更新令牌还是Web应用程序应该自动执行? 最佳做法是什么? 任何人在这里经验与Django REST框架,并可以build议一个技术解决scheme? (最后一个问题的优先级较低)
我正在使用django-rest-framework 。 它提供了一个令人敬畏的Djangopipe理风格可浏览的自我loggingAPI。 但是任何人都可以访问这些页面并使用界面添加数据(POST)。 我怎样才能禁用它?
我正在使用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 =)虽然)。 […]
我已经设法扩展TokenAuthentication并且在使用请求会话存储我的令牌时,我有一个工作模型,但是当我尝试将Authorization作为头部parameter passing时,我注意到我的响应没有METAvariablesHTTP_AUTHORIZATION 。 我还注意到,如果我传递“Authorization2”作为它在请求中可见的头参数: { '_content_type': '', 'accepted_media_type': 'application/json', '_request': <WSGIRequest path:/api/test_auth/, GET:<QueryDict: {}>, POST:<QueryDict: {}>, COOKIES:{ 'MOD_AUTH_CAS_S': 'ba90237b5b6a15017f8ca1d5ef0b95c1', 'csrftoken': 'VswgfoOGHQmbWpCXksGUycj94XlwBwMh', 'sessionid': 'de1f3a8eee48730dd34f6b4d41caa210' }, META:{ 'DOCUMENT_ROOT': '/etc/apache2/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTPS': '1', 'HTTP_ACCEPT': '*/*', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate,sdch', 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8', 'HTTP_AUTHORIZATION2': 'Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4c', … 我的第一个猜测是授权头被Apache删除,我已经读了一些S / O的问题,如果它不符合基本的授权和身份validation,将抛出的价值,但我不知道如何允许授权标头“通过”到Django和WSGIRequest。 有谁知道如何解决这个问题? 我也使用mod_auth_cas和mod_proxy,如果这改变了什么..
用Django的其余框架3.0,并有这些简单的模型: class Book(models.Model): title = models.CharField(max_length=50) class Page(models.Model): book = models.ForeignKey(Books, related_name='related_book') text = models.CharField(max_length=500) 鉴于这个JSON请求: { "book_id":1, "pages":[ { "page_id":2, "text":"loremipsum" }, { "page_id":4, "text":"loremipsum" } ] } 我如何编写一个嵌套的序列化程序来处理这个JSON,给定的book每个page可以创build一个新的页面或更新(如果存在)。 class RequestSerializer(serializers.Serializer): book_id = serializers.IntegerField() page = PageSerializer(many=True) class PageSerializer(serializers.ModelSerializer): class Meta: model = Page 我知道用实例实例化序列化器会更新当前的序列化器,但是如何在嵌套序列化器的create方法中使用它?
假设我们有以下模型: class Classroom(models.Model): room_number = [….] class Teacher(models.Model): name = […] tenure = […] classroom = models.ForeignKey(Classroom) 让我们说,而不是像ManyRelatedPrimaryKeyField函数得到这样的结果: { "room_number": "42", "teachers": [ 27, 24, 7 ] }, 有它返回的东西,包括完整的相关模型表示,如: { "room_number": "42", "teachers": [ { 'id':'27, 'name':'John', 'tenure':True }, { 'id':'24, 'name':'Sally', 'tenure':False }, ] }, 这可能吗? 如果是这样,怎么样? 这是一个坏主意吗?
我正在使用Django Rest Framework和AngularJs上传文件。 我的观点文件如下所示: class ProductList(APIView): authentication_classes = (authentication.TokenAuthentication,) def get(self,request): if request.user.is_authenticated(): userCompanyId = request.user.get_profile().companyId products = Product.objects.filter(company = userCompanyId) serializer = ProductSerializer(products,many=True) return Response(serializer.data) def post(self,request): serializer = ProductSerializer(data=request.DATA, files=request.FILES) if serializer.is_valid(): serializer.save() return Response(data=request.DATA) 作为post方法的最后一行应该返回所有的数据,我有几个问题: 如何检查request.FILES是否有任何内容? 如何序列化文件字段? 我应该如何使用parsing器?