注册时存储用户头像 [英] Storing user's avatar upon registration

查看:221
本文介绍了注册时存储用户头像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用于注册新用户的扩展UserProfile。我的user_created函数连接到注册基本用户实例时发送的信号,并从我的表单创建了具有扩展字段的新UserProfile。以下是代码:

I have an extended UserProfile for registering new users. My user_created function connects to signals sent upon registering basic User instance and creates new UserProfile with extended fields from my form. Here's the code :

from registration.signals import user_registered
from accounts.forms import ExtendedRegistrationForm
import accounts
from accounts.models import UserProfile

def user_created(sender, user, request, **kwargs):
    form = ExtendedRegistrationForm(request.POST, request.FILES)
    data = UserProfile(user=user)
    data.is_active = False
    data.first_name = form.data['first_name']
    data.last_name = form.data['last_name']
    data.pid = form.data['pid']
    data.image = form.data['image']
    data.street = form.data['street']
    data.number = form.data['number']
    data.code = form.data['code']
    data.city = form.data['city']
    data.save()

user_registered.connect(user_created)

问题在这个表单上,我有一个头像的图像字段。从代码中可以看出,我从表单的数据列表中获取数据。但是显然,imageField不会发送它的POST请求的数据(因为我得到 MultiValueDictKeyError在/ user / register / < QueryDict ... 中没有找到密钥'image'),所以我无法从数据[]获取。

Problem is that on this form I have an image field for avatar. As you can see from the code, I'm getting data from form's data list. But apparently imageField does not send it's data with POST request(as I'm getting MultiValueDictKeyError at /user/register/, Key 'image' not found in <QueryDict...) so I can't get it from data[] .

alt text http:/ /img38.imageshack.us/img38/3839/61289917.png
如果通常的变量在数据内,我应该在哪里查找文件?还是问题更复杂?奇怪的是,我的表单没有属性clean_data ...我在这里使用dmitko的方法: http://dmitko.ru/?p=546&lang=en 。我的:

表单: http://paste.pocoo.org/show/ 230754 /

型号: http://paste.pocoo。 org / show / 230755 /

推荐答案

在使用该表单之前,您应该验证该表单,创建您以前使用的clean_data属性。只需检查form.is_valid(),clean_data属性将可用,并应包含该文件。

You should be validating the form before using it, which will create the "cleaned_data" attribute you're used to. Just check form.is_valid() and the "cleaned_data" attribute will be available, and should contain the file.

表单的数据属性将作为其第一个参数(在这种情况下为request.POST)中传入的任何内容,并将文件分别存储在files属性中(无论您传入的是第二个参数,在这种情况下,request.FILES)。您不想直接访问表单的数据或文件属性,如果您这样做,您只是直接从请求中读取数据,并且没有从使用表单获得任何好处。

The form's "data" attribute is going to be whatever you passed in as its first initalization argument (in this case, request.POST), and files are stored separately in the "files" attribute (whatever you pass in as the second argument, in this case, request.FILES). You don't want to be accessing the form's "data" or "files" attributes directly, as, if you do, you're just reading data straight from the request and not getting any benefit from using forms.

这篇关于注册时存储用户头像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆