2012-08-01 5 views
2
class CreateUserResource(ModelResource): 
    class Meta: 
     allowed_methods = ['post'] 
     object_class = User 
     authentication = ApiKeyAuthentication() 
     authorization = DjangoAuthorization() 
     include_resource_uri = False 
     fields = ['username'] 
     models.signals.post_save.connect(create_api_key, sender=User) 

    def obj_create(self, bundle, request=None, **kwargs): 
     username, password = bundle.data['username'], bundle.data['password'] 
     #try: 
     bundle.obj = User.objects.create_user(username, '', password) 
     #except IntegrityError: 
      #raise BadRequest('That username already exists') 
     #return bundle 

이 리소스를 사용하여 새 사용자를 만듭니다. 하지만 이렇게하려면 api_key가 필요합니다. 나는 익명으로 api_key를 어떻게 얻을 수 있습니까?어떻게 장고와 tastypie 익명 사용자를 등록 할 수 있습니까?

답변

2

인증/승인없이 사용자를 생성하는 이유는 무엇입니까?

authentication = Authentication() 
authorization = Authorization() 

ApiKeyAuthentication()에는 appr이 필요합니다.

class CreateUserResource(ModelResource): 
    class Meta: 
     resource_name = 'user' 
     allowed_methods = ['post'] 
     object_class = User 
     authentication = Authentication() 
     authorization = Authorization() 
     include_resource_uri = False 
     fields = ['username'] 

    def obj_create(self, bundle, request=None, **kwargs): 
     try: 
      bundle = super(CreateUserResource, self).obj_create(bundle, request, **kwargs) 
      bundle.obj.set_password(bundle.data.get('password')) 
      bundle.obj.save() 
      '''assign user to a group w/ sufficient permissions''' 
      user = User.objects.get(id=bundle.obj.id) 
      group = Group.objects.get(id=1) 
      user.groups.add(group) 
     except IntegrityError: 
      raise BadRequest('That username already exists') 
     return bundle 
+0

확인 : DB 테이블 'tastypie_apikey'의 항목은 ...

이 인증되지 않은하면서 내가 사용자 계정을 만드는 방법이다. 내 코드를 편집했습니다. 이제 또 다른 질문이 있습니다 : api_key가 새로운 사용자를 요청할 새로운 사용자를 성공적으로 생성 한 후? – Burak

+0

처음에는'user = User.objects.get (id = bundle.obj.id)'가 다소 어리 석고'bundle.obj.groups.add (group)'는 괜찮을 것입니다 ... 음, 처음에는 당신은 테이블 tastypie_apikey를 검사하여'models.signals.post_save.connect (create_api_key, sender = User)'가 작동하는지 확인해야합니다 ... 키를 가져 오는 것은 사용자 생성 직후 상당히 간단합니다 : 'apikey = ApiKey.objects .get (user = bundle.obj)' – Martin

관련 문제