Python 与注册同时创建配置文件
我在我的项目中有一个用户注册系统,还有一个配置文件系统,问题是当我创建一个注册用户时,它不会同时创建配置文件,因此,当我创建一个新用户并尝试输入其自己的配置文件时,我获得以下错误: 用户没有用户配置文件。 这是我的配置: views.py:Python 与注册同时创建配置文件,python,django,django-registration,user-profile,Python,Django,Django Registration,User Profile,我在我的项目中有一个用户注册系统,还有一个配置文件系统,问题是当我创建一个注册用户时,它不会同时创建配置文件,因此,当我创建一个新用户并尝试输入其自己的配置文件时,我获得以下错误: 用户没有用户配置文件。 这是我的配置: views.py: from django.shortcuts import render_to_response from django.template import RequestContext from dracoin.apps.synopticup.models im
from django.shortcuts import render_to_response
from django.template import RequestContext
from dracoin.apps.synopticup.models import card
from dracoin.apps.home.forms import ContactForm,LoginForm,RegisterForm,userProfileForm
from django.core.mail import EmailMultiAlternatives
from django.contrib.auth.models import User
from dracoin.settings import URL_LOGIN
from django.contrib.auth import login,logout,authenticate
from django.http import HttpResponseRedirect
from django.core.paginator import Paginator, EmptyPage, InvalidPage
from django.contrib.auth.decorators import login_required
def index(request):
return render_to_response('home/index.html',context_instance=RequestContext(request))
@login_required(login_url=URL_LOGIN)
def landing(request):
return render_to_response('home/landing.html',context_instance=RequestContext(request))
@login_required(login_url=URL_LOGIN)
def shop(request,pagina):
lista_tarj = card.objects.filter(status=True)
paginator = Paginator(lista_tarj,5)
try:
page = int(pagina)
except:
page = 1
try:
tarjetas = paginator.page(page)
except (EmptyPage,InvalidPage):
tarjetas = paginator.page(paginator.num_pages)
ctx = {'tarjetas':tarjetas}
return render_to_response('home/shop.html',ctx,context_instance=RequestContext(request))
@login_required(login_url=URL_LOGIN)
def singleCard(request,id_tarj):
tarj = card.objects.get(id=id_tarj)
ctx = {'card':tarj}
return render_to_response('home/singleCard.html',ctx,context_instance=RequestContext(request))
@login_required(login_url=URL_LOGIN)
def contacto(request):
info_enviado = False # Define si se envio la informacion o no
email = ""
titulo = ""
texto = ""
if request.method == "POST":
formulario = ContactForm(request.POST)
if formulario.is_valid():
info_enviado = True
email = formulario.cleaned_data['Email']
titulo = formulario.cleaned_data['Titulo']
texto = formulario.cleaned_data['Texto']
# Configuracion de enviado de correos vis hotmail
to_supp = 'elzipa25@gmail.com'
html_content = "Informacion recibida<br><br><br>***Mensaje***<br><h3>%s<h3><br><br>%s<br><br>%s"%(titulo,email,texto)
msg = EmailMultiAlternatives('Correo de Contacto',html_content,'from@server.com',[to_supp])
msg.attach_alternative(html_content,'text/html') # Contenido definido como html
msg.send()
else:
formulario = ContactForm()
ctx = {'form':formulario,'email':email, 'titulo':titulo, 'texto':texto, 'info_enviado':info_enviado}
return render_to_response('home/contacto.html',ctx,context_instance=RequestContext(request))
def login_view(request):
mensaje = ""
if request.user.is_authenticated():
return HttpResponseRedirect('/')
else:
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
next = request.POST['next']
username = form.cleaned_data['username']
password = form.cleaned_data['password']
usuario = authenticate(username=username,password=password)
if usuario is not None and usuario.is_active:
login(request,usuario)
return HttpResponseRedirect(next)
else:
mensaje = "user or password aren't correct"
next = request.REQUEST.get('next')
form = LoginForm()
ctx = {'form':form,'mensaje':mensaje,'next':next}
return render_to_response('home/login.html',ctx,context_instance=RequestContext(request))
def logout_view(request):
logout(request)
return HttpResponseRedirect('/')
def register_view(request):
form = RegisterForm()
if request.method == "POST":
form = RegisterForm(request.POST)
if form.is_valid():
first_name = form.cleaned_data['first_name']
usuario = form.cleaned_data['username']
email = form.cleaned_data['email']
password_one = form.cleaned_data['password_one']
password_two = form.cleaned_data['password_two']
u = User.objects.create_user(first_name=first_name,username=usuario,email=email,password=password_one)
u.save()
return render_to_response('home/thanks_register.html',context_instance=RequestContext(request))
else:
ctx = {'form':form}
return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))
ctx = {'form':form}
return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))
def edit_profile(request):
user = request.user
user_profile = user.userprofile
if request.method == 'POST':
user_profile_form = userProfileForm(request.POST)
if user_profile_form.is_valid():
#update user profile
user_profile.name = request.POST['name']
user_profile.user = user
user_profile.email = request.POST['email']
user_profile.save()
else:
user_profile_form = userProfileForm(instance=user_profile)
variables = RequestContext( request, {
'user_profile_form': user_profile_form}
)
return render_to_response( 'home/edit_profile.html', variables )
models.py:
rom django.db import models
from django.contrib.auth.models import User
def url(self,filename):
ruta = "MultimediaData/Users/%s/%s"%(self.user.username,filename)
return ruta
class userProfile(models.Model):
name = models.CharField(max_length=30, default='')
user = models.OneToOneField(User)
photo = models.ImageField(upload_to=url)
email = models.EmailField(max_length=75)
def __unicode__(self):
return self.user.username
和my url.py:
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^$','dracoin.apps.home.views.index' ,name='vista_principal'),
url(r'^landing/$','dracoin.apps.home.views.landing' ,name='vista_aterrizaje'),
url(r'^shop/page/(?P<pagina>.*)/$','dracoin.apps.home.views.shop' ,name='vista_tienda'),
url(r'^card/(?P<id_tarj>.*)/$','dracoin.apps.home.views.singleCard',name='vista_single_card'),
url(r'^contacto/$','dracoin.apps.home.views.contacto' ,name='vista_contacto'),
url(r'^login/$','dracoin.apps.home.views.login_view',name='vista_login'),
url(r'^logout/$','dracoin.apps.home.views.logout_view',name='vista_logout'),
url(r'^registro/$','dracoin.apps.home.views.register_view',name='vista_registro'),
url(r'^edit_profile/$','dracoin.apps.home.views.edit_profile', name='vista_profile'),
从django.conf.url导入模式,包括,url
urlpatterns=模式(“”,
url(r'^$'、'dracoin.apps.home.views.index',name='vista_principal'),
url(r'^landing/$,'dracoin.apps.home.views.landing',name='vista\u aterrizaje'),
url(r“^shop/page/(?P.*)/$”,“dracoin.apps.home.views.shop”,name='vista_tienda'),
url(r'^card/(?P.*)/$,'dracoin.apps.home.views.singleCard',name='vista\u single\u card'),
url(r“^contacto/$”,“dracoin.apps.home.views.contacto”,name='vista\u contacto'),
url(r“^login/$”,“dracoin.apps.home.views.login\u view”,name='vista\u login'),
url(r“^logout/$”,“dracoin.apps.home.views.logout\u view”,name='vista\u logout'),
url(r“^registro/$”,“dracoin.apps.home.views.register\u view”,name='vista\u registro'),
url(r“^edit\u profile/$”,“dracoin.apps.home.views.edit\u profile”,name='vista\u profile'),
只有在从“管理”面板创建配置文件时,我才能从用户界面输入和编辑配置文件
我的问题是:当我从用户界面注册新用户时,我应该在配置中更改什么以允许我同时创建新的配置文件
我知道我可以使用其他方法(如“AbstractUser”)注册创建概要文件,但我更喜欢扩展“User”,以尽可能保留我的实际结构
谢谢!!!更改
userProfile
中的photo
字段,如下所示:
class userProfile(models.Model):
name = models.CharField(max_length=30, default='')
user = models.OneToOneField(User)
photo = models.ImageField(blank=True,upload_to=url)
email = models.EmailField(max_length=75)
def __unicode__(self):
return self.user.username
def register_view(request):
form = RegisterForm()
if request.method == "POST":
form = RegisterForm(request.POST)
if form.is_valid():
first_name = form.cleaned_data['first_name']
usuario = form.cleaned_data['username']
email = form.cleaned_data['email']
password_one = form.cleaned_data['password_one']
password_two = form.cleaned_data['password_two']
u = User.objects.create_user(first_name=first_name,username=usuario,email=email,password=password_one)
u.save()
#add user profile
user_profile = userProfile(name=first_name,user=u,email=email)
user_profile.save()
return render_to_response('home/thanks_register.html',context_instance=RequestContext(request))
else:
ctx = {'form':form}
return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))
ctx = {'form':form}
return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))
这允许您添加不带照片的userprofile
创建新用户时,只需添加userProfile
,如下所示:
class userProfile(models.Model):
name = models.CharField(max_length=30, default='')
user = models.OneToOneField(User)
photo = models.ImageField(blank=True,upload_to=url)
email = models.EmailField(max_length=75)
def __unicode__(self):
return self.user.username
def register_view(request):
form = RegisterForm()
if request.method == "POST":
form = RegisterForm(request.POST)
if form.is_valid():
first_name = form.cleaned_data['first_name']
usuario = form.cleaned_data['username']
email = form.cleaned_data['email']
password_one = form.cleaned_data['password_one']
password_two = form.cleaned_data['password_two']
u = User.objects.create_user(first_name=first_name,username=usuario,email=email,password=password_one)
u.save()
#add user profile
user_profile = userProfile(name=first_name,user=u,email=email)
user_profile.save()
return render_to_response('home/thanks_register.html',context_instance=RequestContext(request))
else:
ctx = {'form':form}
return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))
ctx = {'form':form}
return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))
您想在注册用户时创建
用户配置文件
,或者想将用户配置文件字段添加到用户模型(扩展用户
模型)?嗯,mi的问题是,当我创建一个用户时,我必须从管理员创建一个配置文件,以便以后可以从用户界面编辑它。如果我在管理员面板中创建配置文件,我可以编辑它,但是如果我不从管理员创建每个用户的配置文件,我不能像用户一样编辑我的配置文件,我相信每个配置文件都应该是一个自动生成的配置文件,至少使用default信息以后每个用户都可以编辑他们自己的配置文件。再次感谢您Hasan=D,我有一个提示,当您放置user\u profile=userProfile(name=first\u name,user=user,email=email)
“user”在我的案例“usuario”中?或者是另一个vaiable导入?对不起,伙计。用户是可变的u
。我编辑我的答案。谢谢你,它运行得很好,当我创建一个新用户时,它同时显示各自的配置文件,当我与新用户登录时,我可以输入并查看配置文件。但是,如果我决定放一些照片或编辑(像用户一样)例如,usr电子邮件显示此用户的用户配置文件已存在。我如何解决此问题?从编辑配置文件视图中删除User\u profile.User=User
。如果我的答案对您有好处,请给出我的答案。我从编辑配置文件视图中删除User\u profile.User=User
,但sam例如,当我放置新图片或修改其他信息时出现错误:(