如何使用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
好吧。我编辑了我的代码。现在我还有一个问题:成功创建新用户后,新用户会用哪个api_key发出请求? – Burak 2012-08-02 05:47:02
起初:'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