注册时存储用户头像

发布于 2024-09-07 09:58:47 字数 1654 浏览 0 评论 0原文

我有一个扩展的用户配置文件用于注册新用户。我的 user_created 函数连接到注册基本用户实例时发送的信号,并使用表单中的扩展字段创建新的用户配置文件。这是代码:

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 请求发送它的数据(因为我在 /user/register/ 处收到 MultiValueDictKeyErrorKey 'image' not found in < ;QueryDict...) 所以我无法从 data[] 获取它。

替代文本 http://img38.imageshack.us/img38/3839/61289917.png< /a> 如果常用变量位于“数据”内,我应该在哪里查找文件?或者问题更复杂?奇怪的是,我的表单没有属性 clean_data...我在这里使用 dmitko 的方法: http://dmitko.ru/?p=546&lang=en。我的:
形式:http://paste.pocoo.org/show/230754/
模型:http://paste.pocoo.org/show/230755/

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)

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
If the usual variables are inside 'data', where should I look for files ? Or is the problem more complicated ? Strange thing is that my form doesn't have attribute cleaned_data... I was using dmitko's method here : http://dmitko.ru/?p=546&lang=en . My :
forms : http://paste.pocoo.org/show/230754/
models : http://paste.pocoo.org/show/230755/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

逐鹿 2024-09-14 09:58:47

您应该在使用表单之前对其进行验证,这将创建您习惯的“cleaned_data”属性。只需检查 form.is_valid(),“cleaned_data”属性就可用,并且应该包含该文件。

表单的“data”属性将是您作为第一个初始化参数传入的任何内容(在本例中为 request.POST),并且文件单独存储在“files”属性中(无论您作为第二个参数传入的内容,在本例中为 request.FILES)。您不想直接访问表单的“数据”或“文件”属性,因为如果这样做,您只是直接从请求中读取数据,而不会从使用表单中获得任何好处。

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.

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.

扛刀软妹 2024-09-14 09:58:47

您确定

属性设置为 multipart/form-data 吗?否则浏览器无法上传文件数据。

Are you sure the <form enctype="..."> attribute is set to multipart/form-data ? Otherwise the browser is not able to upload the file data.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文