gpt4 book ai didi

django - 注册后如何在 allauth 中自定义用户配置文件字段

转载 作者:行者123 更新时间:2023-12-03 21:19:07 31 4
gpt4 key购买 nike

我在我的 Web 应用程序中使用了 allauth 来注册功能。在社交帐户注册中,收集了用户的电子邮件、密码、名字和姓氏。在登录表单中,我只收集用户的电子邮件和密码。

登录后,我的应用程序会将用户重定向到个人资料页面,如果他/她愿意,他/她应该在该页面更新她的个人资料(包括新的和自定义的字段,如我添加的“机构”)。

作为 django-allauth 初学者的问题,我想知道如何将这些新的自定义字段添加到我的用户配置文件中,以及如何在用户注册后更新这些数据。

到现在为止我做了什么:

在settings.py中

AUTH_USER_MODEL = 'auth.User'

在 my_project/models.py
from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):

institution = models.TextField(max_length=254)

在 profile_page.html
{% extends 'base.html' %}
{% block title %}Profile Page{%endblock title%}

{% if user.is_authenticated %}

{%block body%}

<div class="col-md-6" >
<div class="panel panel-default">
<div class="panel-body">
<h1 class="text-center"><b>MY ONTOLOGIES</b></h1><br>
</div>
</div>
</div>
<div class="col-md-6" >
<div class="panel panel-default">
<div class="panel-body">
<h1 class="text-center"><b>MY PROFILE</b></h1><br>
<div class="form-group">
{% csrf_token %}
<label for="id_login" class="col-sm-2 control-label">E-mail:</label>
<div class="col-sm-10">
<input type="email" id="asd" value="{{user.email}}" name="login" class="form-control" required />
</div><br><br>
<label for="first_name" class="col-sm-2 control-label">First Name:</label>
<div class="col-sm-10">
<input type="text" id="id_first_name" value="{{user.first_name}}" name="first_name" class="form-control" required />
</div><br><br>
<label for="last_name" class="col-sm-2 control-label">Last Name:</label>
<div class="col-sm-10">
<input type="text" id="id_last_name" value="{{user.last_name}}" name="last_name" class="form-control" required />
</div><br><br>
<label for="institution" class="col-sm-2 control-label">Institution:</label>
<div class="col-sm-10">
<input type="text" id="id_institution" value="{{user.institution}}" name="institution" class="form-control" placeholder="University/Company" required />
</div><br><br>
<label for="id_password1" class="col-sm-2 control-label">New Password:</label>
<div class="col-sm-10">
<input class="form-control" id="id_password1" name="password1" placeholder="New Password" type="password" />
</div><br><br>
<label class="col-sm-2" for="id_password2">New Password (again):</label>
<div class="col-sm-10">
<input class="form-control" id="id_password2" name="password2" placeholder="New Password (again)" type="password" />
</div>

</div>
</div>
</div>
</div>

{%endblock body%}

{% endif %}

代码显然不完整,因为我没有找到添加字段并按照我的要求正确保存它们的方法。谢谢

最佳答案

我分两步解决了这个问题,并涉及重构我在问题中发布的代码:

  • 第一步(创建自定义字段到 user_table):

  • 首先,我在我的项目中添加了一个名为 CustomUser 的应用程序,我可以在其中处理与 allauth 用户相关的任何问题。

    设置.py
    INSTALLED_APPS = [
    ...
    'CustomUser.apps.CustomuserConfig',
    ]

    AUTH_USER_MODEL = 'CustomUser.CustomUser'

    自定义用户/models.py
    from __future__ import unicode_literals

    from django.contrib.auth.models import AbstractUser
    from django.db import models

    class CustomUser(AbstractUser):
    add_your_custom_fields_here

    自定义用户/apps.py
    from __future__ import unicode_literals

    from django.apps import AppConfig


    class CustomuserConfig(AppConfig):
    name = 'CustomUser'

    在 CustomUser/admin.py
    from django.contrib import admin
    from .models import CustomUser

    admin.site.register(CustomUser)

    将自定义字段配置到用户表后,您需要在 shell 中运行 migrate 命令以添加这些字段。在我的情况下它不起作用,然后我需要刷新我的数据库并再次填充它。
  • 第二步是用新的用户表创建一个更新表单。

  • 首先,您需要从 allauth 覆盖 User 类。在 CustomUser 文件夹中创建一个 form.py 我们有:

    从 Django 导入表单
    从 .models 导入 CustomUser
    class UpdateUserForm(forms.ModelForm):
    class Meta:
    model = CustomUser
    # Add here the fields you want to be present in the update form
    fields = ('first_name', 'last_name', 'institution')

    CustomUser/templates/profile.html 您需要为您的应用程序创建表单。在我的情况下,我创建了一个原始的:
    Update your data <br><br>

    <form action="." method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
    </form>

    自定义用户/views.py 你要配置你的 profile.html 页面的行为
    from django.shortcuts import render
    from .forms import UpdateUserForm
    from django.http import HttpResponseRedirect
    from django.views.generic import UpdateView
    from django.core.urlresolvers import reverse_lazy

    def profile(UpdateView):
    if request.method == 'POST':
    form = UpdateUserForm(request.POST)
    if form.is_valid():
    return HttpResponseRedirect('/accounts/profile/')
    else:
    form = UpdateUserForm()

    return render(request, 'profile.html', {'form':form})

    class UserUpdate(UpdateView):
    form_class = UpdateUserForm
    template_name = 'profile.html'
    success_url = reverse_lazy('profile')

    #get object
    def get_object(self, queryset=None):
    return self.request.user

    最后,只需将 profile.html 页面添加到 urls.py 瞧:
    from CustomUser import views

    url(r'^accounts/profile/$', views.UserUpdate.as_view() , name='profile'),

    希望它可以帮助某人...谢谢

    关于django - 注册后如何在 allauth 中自定义用户配置文件字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40811437/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com