如何使用Django和tastypie注册匿名用户?

问题描述:

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?如何使用Django和tastypie注册匿名用户?

为什么不创建一个用户未经认证/授权?

authentication = Authentication() 
authorization = Authorization() 

ApiKeyAuthentication()需要一个appr。条目的数据库表“tastypie_apikey” ......

这是我如何创建一个用户帐户,同时未经身份验证:

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

好吧。我编辑了我的代码。现在我还有一个问题:成功创建新用户后,新用户会用哪个api_key发出请求? – Burak 2012-08-02 05:47:02

+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获得(用户= bundle.obj)' – Martin 2012-08-02 14:41:09