2013-07-18 1 views
1

Я пробую пример использования tastypie и django-registration для регистрации api. Когда я запускаю тестовый файл test_register.py, я получаю сообщение об ошибке. Объект «WSGIRequest» не имеет атрибутов «данные». Я думаю, что это, возможно, связано с концепцией пучков. Любая помощь, чтобы получить этот сценарий работы, ценится.Включение tastypie api для django-registration

api.py

from registration.views import register 
from tastypie.resources import ModelResource 
from tastypie.constants import ALL 
from django.contrib.auth.models import User 
from django.contrib.auth import authenticate, login, logout 
from tastypie.http import HttpUnauthorized, HttpForbidden 
from django.conf.urls.defaults import url 
from tastypie.utils import trailing_slash 
from registration.models import RegistrationManager 

class RegisterUserResource(ModelResource): 
    class Meta: 
     allowed_methods = ['post'] 
#  authentication = Authentication() 
#  authorization = Authorization() 
     include_resource_uri = 'register' 
     fields = ['username','password'] 

    def prepend_urls(self): 
     return [ 
      url(r"^(?P<resource_name>%s)/register%s$" % 
       (self._meta.resource_name, trailing_slash()), 
       self.wrap_view('register'), name="api_register"), 
     ] 

    def register(self, bundle, request=None, **kwargs): 
     username, password = bundle.data['username'], bundle.data['password'] 
     print "reached register" 
     try: 
      bundle.obj = RegistrationManager.create_inactive_user(username, username, password) 
     except IntegrityError: 
      raise BadRequest('That username already exists') 
      return bundle 

test_register.py

import requests 
import json 
from urllib2 import urlopen 
import datetime 
import simplejson 

url = 'http://127.0.0.1:8000/apireg/registeruser/register/' 
data = {'username' :'[email protected]', 'password' : 'newpass'} 
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
print json.dumps(data) 
r = requests.post(url, data=json.dumps(data), headers=headers) 
print r.content 

urls.py

from userdetails.api import RegisterUserResource 
register_userresource = RegisterUserResource() 
admin.autodiscover() 

urlpatterns = patterns('', 
    ... 
    (r'^apireg/', include(register_userresource.urls)), 
) 

Обновление

Я внесла некоторые изменения в метод регистрации без использования пакета, и теперь базовая функциональность работает. Это создает неактивный пользователь.

def register(self,request, **kwargs): 
     data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json')) 

     username = data.get('username', '') 
     password = data.get('password', '') 
     # try: 
    #  userreg = RegistrationManager 
     RegistrationManager().create_inactive_user(username, username, password,'',send_email=False) 

У меня все еще есть ошибка, хотя это работает, и я пытаюсь ее решить. «error_message»: «Объект« NoneType »не может быть вызван»

+0

Просто используйте это: http://stackoverflow.com/questions/11770501/how-can-i-login-to-django-using-tastypie –

ответ

1

Вместо этого я попытался использовать RegistrationProfile. Это сработало. (См. Примеры в django-registration/tests/models.py). Это будет что-то вроде

from registration.models import RegistrationProfile 
new_user = RegistrationProfile.objects.create_inactive_user(
         username=username, 
         password=password, 
         email=email, site=Site.objects.get_current(), 
         send_email=True)