का उपयोग करके डीजेंगो-पंजीकरण का विस्तार करना मैंने सिंकल का उपयोग करके नए क्षेत्रों के साथ django-पंजीकरण का विस्तार करने के लिए एक समाधान स्टैक ओवरफ्लो पर पाया है। यहां लिंक है: http://dmitko.ru/?p=546।
मैंने विस्तारित प्रोफाइल मॉडल, विस्तारित फॉर्म बनाया है, सेटिंग में आवश्यक विकल्प जोड़े हैं, परिभाषित यूआरएल और उचित रूप प्रदर्शित किया गया है लेकिन केवल सामान्य उपयोगकर्ता (ऑथ मॉड्यूल से) बनाया गया है। ऐसा क्यों हो रहा है?सिग्नल
account.models:
from django.db import models
from django.contrib.auth.models import User
from registration.signals import user_registered
import hashlib
class InheritedProfile(models.Model):
first_name = models.CharField("Name", max_length=50, blank=True, null=True)
last_name = models.CharField("Last name", max_length=50, blank=True, null=True)
pid = models.CharField("PESEL", max_length=11, blank=True, null=True)
street = models.CharField("Street", max_length=50, blank=True, null=True)
number = models.CharField("Flat/house number", max_length=10, blank=True, null=True)
code = models.CharField("Zip ", max_length=6, blank=True, null=True)
city = models.CharField("City", max_length=50, blank=True, null=True)
class Meta:
abstract=True
class UserProfile(InheritedProfile, User):
def upload_path(self, field_attname):
filename = hashlib.md5(field_attname).hexdigest()[:4] + "_" + field_attname
return "uploads/users/%s" % (filename,)
image = models.ImageField(upload_to=upload_path, verbose_name="Image", blank=True, null=True)
def user_created(sender, user, request, **kwargs):
form = ExtendedRegistrationForm(request.POST)
extended_user = UserProfile(user=user)
extended_user.is_active = False
extended_user.first_name = form.extended_user['first_name']
extended_user.last_name = form.extended_user['last_name']
extended_user.pid = form.extended_user['pid']
extended_user.image = form.extended_user['image']
extended_user.street = form.extended_user['street']
extended_user.number = form.extended_user['number']
extended_user.code = form.extended_user['code']
extended_user.city = form.extended_user['city']
extended_user.save()
user_registered.connect(user_created)
मैं इस InheritedProfile जरूरत सार होने के लिए के रूप में अन्य मॉडलों में एक ही क्षेत्रों का प्रयोग करेंगे।
AUTH_PROFILE_MODULE = 'account.UserProfile'
ACCOUNT_ACTIVATION_DAYS = 7
अंत में यह कैसे पंजीकरण संकेत लग रहा है की तरह है::
from django.dispatch import Signal
# A new user has registered.
user_registered = Signal(providing_args=["user", "request"])
संपादित करें: इंडेंटेशन
account.forms
from django import forms
#import strings
from registration.forms import RegistrationForm
from models import UserProfile, InheritedProfile
class ExtendedRegistrationForm(RegistrationForm):
first_name = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="First name")
last_name = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="Last name")
pid = forms.RegexField(regex=r'^\d{11}', max_length=11 ,widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)))
image = forms.ImageField(label="Image",)
street = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="Street")
number = forms.CharField(widget=forms.TextInput, label="House/flat number")
code = forms.RegexField(regex=r'^\d{2}[-]\d{3}', max_length=6, widget=forms.TextInput(attrs=attrs_dict), label="Postal code")
city = forms.CharField(widget=forms.TextInput, label="City")
और विकल्प सेटिंग्स को जोड़ा गया user_created चा कुछ भी नहीं nges जब तक मैं बदल रहा
user_registered.connect(user_created)
को
user_registered.connect(user_created, sender=UserProfile)
अब मैं हो रही थी की कोशिश की है:
"SMTPServerDisconnected
अपवाद स्थान: /bin/python-2.6.1/lib/ getyply में python2.6/smtplib.py, लाइन 340 "
ट्रेसबैक:
File "/home/fandrive/site-packages/django/core/handlers/base.py" in get_response
92. response = callback(request, *callback_args, **callback_kwargs)
File "/home/fandrive/registration/views.py" in register
47. new_user = backend.register(request, **form.cleaned_data)
File "/home/fandrive/registration/backends/default/__init__.py" in register
20. password, site)
File "/home/fandrive/site-packages/django/db/transaction.py" in _commit_on_success
240. res = func(*args, **kw)
File "/home/fandrive/registration/models.py" in create_inactive_user
80. registration_profile.send_activation_email(site)
File "/home/fandrive/registration/models.py" in send_activation_email
256. self.user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
File "/home/fandrive/site-packages/django/contrib/auth/models.py" in email_user
271. send_mail(subject, message, from_email, [self.email])
File "/home/fandrive/site-packages/django/core/mail.py" in send_mail
390. connection=connection).send()
File "/home/fandrive/site-packages/django/core/mail.py" in send
266. return self.get_connection(fail_silently).send_messages([self])
File "/home/fandrive/site-packages/django/core/mail.py" in send_messages
172. sent = self._send(message)
File "/home/fandrive/site-packages/django/core/mail.py" in _send
186. email_message.message().as_string())
File "/bin/python-2.6.1/lib/python2.6/smtplib.py" in sendmail
708. self.rset()
File "/bin/python-2.6.1/lib/python2.6/smtplib.py" in rset
438. return self.docmd("rset")
File "/bin/python-2.6.1/lib/python2.6/smtplib.py" in docmd
363. return self.getreply()
File "/bin/python-2.6.1/lib/python2.6/smtplib.py" in getreply
340. raise SMTPServerDisconnected("Connection unexpectedly closed")
Exception Type: SMTPServerDisconnected at /user/register/
Exception Value: Connection unexpectedly closed
भले ही मैं इस समय डमी ईमेल बैकएंड का उपयोग कर रहा हूं। पंजीकरण पर मेल फ़ंक्शन भेजने पर टिप्पणी करते हुए इस समस्या को हल किया गया लेकिन फिर भी मेरा विस्तारित उपयोगकर्ता नहीं बनाया गया है।
नहीं, ध्यान से देखो। मेरा कार्य उसी तरह से जुड़ता है। मैंने अभी उपयोगकर्ता_registered सिग्नल के कोड प्रदान किया है। मैंने यहां अपने उपयोगकर्ता के साथ विरासत से संबंध विधि में स्विच किया है: http://stackoverflow.com/questions/3124052/models-does-not-create-tables-when-synched और इस फ़ंक्शन का कोड किसी भी तरह से मेरी टेबल का निर्माण अवरुद्ध करता है । आपने यह फ़ंक्शन कहां रखा है? और इस सिग्नल से कनेक्ट करते समय प्रेषक को यह नहीं देना चाहिए? – crivateos
मैंने इस फ़ंक्शन को एक अलग फ़ाइल में ले जाया है। अब मेरी टेबल बनाई गई हैं लेकिन फिर भी मुझे कोई विस्तारित उपयोगकर्ता प्रोफाइल नहीं मिला है। – crivateos
यह कोड फ़ाइल 'regbackend.py' में है जो urls.py के समान स्तर पर है और मिलान पैटर्न से पहले urls.py में आयात किया जाता है। यह कोड सीधे regbackend से कॉपी किया गया है।पाई (इसलिए प्रेषक प्रदान किया जाता है) और इस फ़ाइल में कुछ और नहीं है। – dmitko