【问题标题】:Log in / Sign up directly on home page直接在主页登录/注册
【发布时间】:2014-06-19 02:29:14
【问题描述】:

我想让用户直接登录主页而不是登录页面'../account/login/'。我应该怎么做才能使它成为可能?如何将主页上的输入字段与allauth连接起来?我不知道这是否太复杂而无法以这种方式工作?

【问题讨论】:

    标签: django django-allauth


    【解决方案1】:

    有一个适合我的解决方案。这不是最佳解决方案,因为它不是 DRY,所以如果有人改进它,我将不胜感激!

    基本上我所做的就是渲染官方的allauth登录模板并复制表单的HTML代码。然后我更改了 csrf 令牌和 url 并将其粘贴到主页模板中。

    这里是登录/注销的示例代码。您可以通过注册来执行相同的操作。 (请注意,我仅使用电子邮件而不是用户名登录,您的代码可能会根据您的 allauth 设置而有所不同。查看您的登录和注册模板以了解您需要哪些输入字段及其名称。)

    {% load account %}
    
    <h1>Login / Logout</h1>
    
    {% if user.is_authenticated %}
        <p>Loged in with e-mail: {{ request.user.email }}</p>
        <a href="{% url "account_logout" %}">Logout</a>
    {% else %}
        <form action="{% url "account_login" %}" method="post">
            {% csrf_token %}
            <input type="email" placeholder="E-mail" name="login">
            <input type="password" placeholder="Password" name="password">
            <label for="id_remember_menu" class="text-primary">Remember Me:</label>
            <input id="id_remember_menu" name="remember" type="checkbox">
            {% if redirect_field_value %}
                <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
            {% endif %}
            <button type="submit">Login</button>
            <a href="{% url 'account_reset_password' %}">Forgot Password?</a>
        </form>
    {% endif %}
    

    我想改进代码并能够使用{{ form }} 直接在主页模板中呈现表单,而不是复制 HTML。如果我能做到,我稍后会更新回复。

    【讨论】:

    • 它对你有用吗?如果是这样,请不要忘记更新并接受答案!谢谢
    • @ferrangb 你有没有找到直接使用 {{form}} 而不是复制 HTML 代码的方法?
    • @joey,不,我没有花更多时间在它上面。我知道这不是最好的方法,但它有效! :D
    • 它有效。极好的。你有没有机会弄清楚如何用 {{ forms }} 呈现它
    • 各位,如果实现context processortemplatetag 就可以使用{{form}}。详情在这里 -> *.com/a/39235634/4992248
    【解决方案2】:

    如果您确实需要,您可以将 allauth URL 放在不同的路径下。 allauth 使用基于名称的 URL 反转,因此新的路径前缀将被自动拾取。

    【讨论】:

    • 不幸的是,这并没有帮助,因为我需要在同一页面上有“登录”表单和“注册”表单(例如主页)。我需要这样的东西:healthifyme.com 大多数使用 allauth 的网站都有默认的 URL 路径(accounts/),但我真的必须自定义它。