регистрация и сохранение данных в django - PullRequest
1 голос
/ 06 марта 2012

Хорошо, у меня снова спросили.

На этот раз я использую django-регистрацию с бэкэндом, чтобы помочь мне.

Если кому-то интересно, почему мой regbackend.pyимеет так много других функций, потому что сервер жаловался на эти методы, поэтому я просто скопировал и вставил туда.

Однако я просто хотел бы знать, как бэкэнд вызывает функцию сохранения, которая сохранит его вбаза данных.

Я включил метод сохранения здесь, потому что я думал, что он будет вызван здесь.В противном случае он уже есть в моем forms.py.

Пожалуйста, помогите мне, я действительно пытался просмотреть профили pinax и django, но это потребовало бы полной модернизации моего проекта.

Спасиботак много.

forms.py:

from django import forms
from r2.models import Keyword
from r2.models import UserProfile
from registration.forms import RegistrationForm
from registration.models import RegistrationProfile
from django.utils.translation import ugettext_lazy as _
from registration.forms import RegistrationForm, attrs_dict

class ProjectSpecificRegistrationForm(RegistrationForm):
    keywords = forms.ModelChoiceField(queryset=Keyword.objects.all())
    first_name =forms.CharField(widget=forms.TextInput(attrs=attrs_dict),label=_(u'First Name')) 
    last_name =forms.CharField(widget=forms.TextInput(attrs=attrs_dict),label=_(u'Last Name'))

    def save(self, profile_callback=None):
        new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
        password=self.cleaned_data['password1'],
        email=self.cleaned_data['email'])
    new_profile = UserProfile(user=new_user,username=self.cleaned_data['username'], keywords_subscribed=self.cleaned_data['keywords'],first_name=self.cleaned_data['first_name'],last_name=self.cleaned_data['last_name'])

        new_profile.save()
        return new_user()

Urls.py:

url(r'^accounts/register/$',register, {'backend': 'registration.regbackend.RegBackend','form_class' : ProjectSpecificRegistrationForm},  name='registration_register'),
url(r'^accounts/', include('registration.backends.default.urls')),

Вот мой regbackend.py:

from django.conf import settings
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site
from django.contrib.auth.models import User
from registration import signals
from registration.forms import RegistrationForm
from registration.models import RegistrationProfile
from r2.forms import ProjectSpecificRegistrationForm
from r2.models import *

class RegBackend(object):

    def register(self, request, **kwargs):

        username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
        if Site._meta.installed:
            site = Site.objects.get_current()
        else:
            site = RequestSite(request)
        new_user = RegistrationProfile.objects.create_inactive_user(username, email,
                                                                    password, site)
    user = User.objects.get(username=new_user.username)
        user.first_name = kwargs['first_name']
        user.last_name = kwargs['last_name']
    user.keywords = kwargs['keywords']

        signals.user_registered.send(sender=self.__class__, user=new_user, request=request)
    user.save() 
        return new_user

    def save(self, profile_callback=None):
        print('Came in')
        new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
        password=self.cleaned_data['password1'],
        email=self.cleaned_data['email'])
    new_profile = UserProfile(user=new_user,username=self.cleaned_data['username'], keywords_subscribed=self.cleaned_data['keywords'],first_name=self.cleaned_data['first_name'],last_name=self.cleaned_data['last_name'])

        new_profile.save()
        return new_user()

    def registration_allowed(self, request):
        return getattr(settings, 'REGISTRATION_OPEN', True)

    def post_registration_redirect(self, request, user):
        return ('registration_complete', (), {})

1 Ответ

1 голос
/ 06 марта 2012

Чтобы создать нового пользователя, вы должны использовать register метод вашего бэкэнда.Вам нужно будет передать request туда, поэтому его следует вызывать из представления (или из другого места, у которого есть доступ к request)

backend = RegBackend()
user = backend.register(request, **your_kwargs)

, сервер жаловался на эти методы, поэтомуя просто скопировал и вставил туда.

Не нужно ничего копировать, просто используйте наследование (от registration.backends.default.DefaultBackend)

А регистрационный бэкэнд не имеет (и не должен) иметьsave метод.

...