簡體   English   中英

密碼字段以純文本顯示密碼

[英]password field is showing password in plain text

我使用django allauth進行用戶注冊和登錄系統。 我可以通過使用for循環簡化代碼行來顯示表單。 我也為每個字段獲得了正確的字段類型(TextInput和PasswordInput)。 但是,具有PasswordInput的密碼字段以純文本顯示密碼。 我該如何解決這個問題?

我的注冊頁面(account / signup.html)

<form class="signup" id="signup_form" method="post" action="{% url 'account_signup' %}">
    {% csrf_token %}
     {% for field in form.visible_fields %}
     <div class="form-group">
        <label for="{{ field.id_for_label}}">{{field.label}}</label>
        {{ field.errors.0 }}
        <input type="{{field|input_type}}" name="{{ field.name }}" class="form-control" id="{{ field.id_for_label}}">
     </div>
     {% endfor %}
</form>

filters.py

from django import template
register = template.Library()

@register.filter('input_type')
def input_type(field):
    print('field',field.field.widget.__class__)
    return field.field.widget.__class__.__name__

如何在dot中顯示密碼?

您可以通過在表單類中重寫__init__方法來添加類

def __init__(self, *args, **kwargs): 
    super().__init__(*args, **kwargs) 
    self.fields['password'].widget.attrs['class'] = 'form-control'

密碼以純文本顯示,因為您正在錯誤地分配<input>類型,因此不會像<input type="password">那樣隱藏密碼。

從閱讀注釋,看起來您正在嘗試將自定義引導類添加到表單字段。 正如Anna Vracheva所說,您可以使用表單的__init__方法將類添加到字段中。

from django import forms

class CustomForm("""Whichever class you're inheriting from, probably ModelForm"""):
    # If you're using AllAuth, this is already defined on the form
    password = fields.CharField(widget=forms.PasswordInput) 
    # Or whatever field, for that matter

    def __init__(self, *args, **kwargs):
        super(CustomFieldForm, self).__init__(*args, **kwargs)

        # Option 1 - Assign to only password
        self.fields['password'].widget['class'] = 'form-control'

        # Option 2 - Loop over all fields and assign to all
        for field in self.fields:
            field.widget['class'] = 'form-control'

然后,讓Django的模板執行以下操作,而不是手動呈現HTML:

<!-- This -->
{{ field }}
<-- -->
<!-- Instead of this -->
<input type="{{field|input_type}}" name="{{ field.name }}" 
       class="form-control" id="{{ field.id_for_label}}">

這應該可以解決您在保留表單類時遇到的任何字段渲染問題。

你也可以試試這個:

<input class="form-control" type="{{ field.field.widget.input_type }}"
                   name="{{ field.name }}"
                   id="id_{{ field.name }}" >

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM