简体   繁体   中英

How to validate plain HTML form fields in django

I am a laravel developer and I am new to django. Everything went well in django until I started exploring forms. I want to use plain HTML forms and validate it using django forms validation but I am not getting proper reference or tutorial for doing so.

I want some examples or help for validating plain HTML form fields in django.

Following are the snippets of my code:

Template:

<form action="{% url 'user.create' %}" method="post">
   {% csrf_token %}
   <div class="row">
      <div class="input-field col s6">
           <input id="user_name" name="user_name" type="text">
            <label for="user_name">Username</label>
       </div>
       <div class="input-field col s6">
           <input id="password" name="password" type="password">
           <label for="password">Password</label>
        </div>
     </div>
     <div class="row">
       <div class="input-field col s6">
         <input id="email" name="email" type="email">
         <label for="email">Email</label>
        </div>
        <div class="input-field col s6">
           <input id="phone" name="phone" type="text">
           <label for="phone">Phone</label>
        </div>
      </div>

 <input class="waves-effect waves-light btn blue darken-2" type="submit" value="Register" />
</form>

View:

def createUser(request):
    form = RegisterUser(request.POST)

    if form.is_valid():
        user = User(user_name = form.cleaned_data['user_name'],
        password = form.cleaned_data['password'],
        email = form.cleaned_data['email'],
        phone = form.cleaned_data['phone'],)

        user.save()
        return redirect("index")
    else:
        return messages.error(request, "Invalid data")

Form:

class RegisterUser(forms.Form):
    user_name = forms.CharField(max_length=50)
    password = forms.CharField(max_length = 50)
    email = forms.CharField(max_length = 50)
    phone = forms.CharField(max_length = 50)

I think you are trying to create user using default User Model. If you want to render form with the errors after validation fails I think it is necessary to pass form as context to render method so that template can re-render with error datas. Then you can access errors as form.errors for all field errors, form.non_field_errors for all non field errors or form.fieldname.errors for particular field errors eg: form.user_name.errors .

def create_user(request):
    form = RegisterUser(request.POST)

    if form.is_valid():
        # user = User(user_name = form.cleaned_data['user_name'],
        user_name = form.cleaned_data['user_name'
        password = form.cleaned_data['password'],
        email = form.cleaned_data['email'],
        phone = form.cleaned_data['phone'],)
        user = User.create(username, email)
        user.set_password(password)
        user.save()
        return redirect("index")
    else:
        messages.error(request, "Invalid data")
        return render(request, 'your_form.html', {'form': form})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM