在 Django 中使用纯 HTML 页面进行注册

Posted

技术标签:

【中文标题】在 Django 中使用纯 HTML 页面进行注册【英文标题】:Use pure HTML page for registration in Django 【发布时间】:2015-08-09 10:47:58 【问题描述】:

我是 Django 新手,所以请放轻松。我已经准备好使用网站的整个前端。我正在用 Django 编写后端。所以,我的主页有一个注册表单,我想使用Django-registration-redux 注册用户。我不明白的是,是否有必要使用 Django 表单来生成表单,或者我可以简单地使用纯 html 将发布数据发送到 Django 后端。表单如下所示:

<form role="form" id="user_form" method="post"
action="/appname/register" enctype="multipart/form-data">
    % csrf_token %
    % if registered %
        <strong>Thank you for registering! Check your email and confirm registration.
       </strong>
    % else %
        <div class="form-group">
            <label for="register-username" style="color: rgba(255, 255, 0, 0.68);font-weight: 500;">
                <i class="icon-user"></i>
                <b>Email</b>
            </label>
            <input class="form-control" id="register-username" type="text" placeholder="" required>
        </div>
        <div class="form-group" style="color: rgba(255, 255, 0, 0.68);font-weight: 500;">
            <label for="register-password">
                <i class="icon-lock"></i>
                <b>Password</b>
            </label>
            <input class="form-control" id="register-password" type="password" placeholder="" required>
        </div>
</form>

【问题讨论】:

【参考方案1】:

我猜你没有在输入字段中提到 name 属性。如果你不想使用 django 表单功能,没关系。但请记住在表单中提供名称属性,它们的值应与模型中定义的值相同。例如,假设我的模型是 class Post(models.Model): title = models.CharField(max_length=100) 那么,在你的表单中,你应该像这样声明一个输入字段:

【讨论】:

【参考方案2】:

有几种方法可以在 Django 表单中使用纯 HTML。事实上,我认为这是大多数情况,因为 Django 提供的表单系统根本不够灵活。

    您可以尝试直接访问 POST 参数。例如

    views.py:

    ...
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    register(username, password)
    ...
    

    模板.html

    <form action="/path" method="post">
      <input type="text" name="username"/>
      <input type="password" name="password"/>
    </form>
    

    请注意,您可能必须处理 CSRF 令牌。

    如果你已经有一个 Django 表单,例如

    class LoginForm(forms.Form):
        email = forms.EmailField(label="Email")
        password = forms.CharField(label="Password", max_length=255)
    

    您可以将属性名称(例如电子邮件)与 HTML 表单中的 name 属性匹配。例如 模板.html

    <form action="/path" method="post">
      <input type="email" name="email"/>
      <input type="password" name="password"/>
    </form>
    

    然后在你的views.py中,你可以实例化表单并访问其中的数据

    login_form = LoginForm(request.POST)
    email = login_form.cleaned_data['email']
    password = login_form.cleaned_data['password']
    login(email, password)
    

【讨论】:

我可以使用变量 ID 来创建一个接受批量数据的表单吗?【参考方案3】:

您当然可以使用纯 HTML,只要您为输入元素提供 Django 期望的 name 属性(您似乎根本没有给它们任何名称,因此表单甚至不会提交任何数据)。

但是,这样做您将错过在无法正确验证时重新显示带有错误和部分填充数据的表单的能力。由于您的字段似乎具有的唯一自定义是添加“表单控制”类,因此您不妨在 Django 表单中进行更改。

【讨论】:

另外,你错过了% endif % 谢谢,您能指出如何将此表单转换为 Django 表单吗?我为这个表单定义了 CSS。如何重新利用它?【参考方案4】:

您不必使用Django forms。您可以在 views.py 中随意处理 post 变量:

if request.method == 'POST':
    # do something with request.POST

尽管如此,我还是建议您利用 Django 表单提供的功能。

【讨论】:

谢谢。因为,我已经设计了前端,我不想重新发明***。你能告诉我如何在视图中处理注册吗?对不起,我是新手。 欢迎。我完全明白。您仍然可以拥有 django 表单而不渲染它们,您只需要确保 &lt;input&gt; 的名称与表单的字段一致。对于注册,有几篇不错的文章。也看看这个:***.com/questions/3523745/…【参考方案5】:

是的,只要输入 names 与注册应用程序验证的内容匹配,您始终可以使用纯 HTML 表单。

【讨论】:

以上是关于在 Django 中使用纯 HTML 页面进行注册的主要内容,如果未能解决你的问题,请参考以下文章

Django框架form表单配合ajax注册

要获取无效的凭证,甚至凭证都以Django登录格式在数据库中注册?

Django电商网站--注册功能

python Django注册页面显示头像

Django / Python注册页面

Django django-allauth 实现第三方授权登陆平台(百度和github为例)