Hướng dẫn xây dựng Django forms cơ bản
Xây dựng forms:
Đầu tiên, bạn tạo một cái form đơn giản trên website nhằm để lấy tên người dùng:
<form action="/your-name/" method="post">
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" value="{{ current_name }}">
<input type="submit" value="OK">
</form>
Đoạn mã trên sẽ yên cầu trình duyệt trả lại dữ liệu form về URL/your-name/, bằng cách dùng POST
thì bạn sẽ có một trường văn bản chứa tên của mình.
Đưa HTML form vào trong Django với forms.py:
from django import forms
class NameForm(forms.Form):
your_name = forms.CharField(label='Your name', max_length=100)
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" maxlength="100" required>
Chế độ xem:
Khi dữ liệu được gửi trở lại trang web Django để xử lý thì chúng ta cần khởi tạo nó trong dạng xem cho URL:
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import NameForm
def get_name(request):
# Nếu đây là POST yêu cầu thì chúng ta cần xử lý dữ liệu
if request.method == 'POST':
# Tạo form thể hiện dữ liệu từ yêu cầu
form = NameForm(request.POST)
# Kiểm tra xem có hợp lệ hay không
if form.is_valid():
# xử lý dữ liệu form.cleaned_data theo yêu cầu
# ...
# chuyển hướng tới URL mới:
return HttpResponseRedirect('/thanks/')
# Nếu nhận được GET (hoặc các method khác) thì chúng ta sẽ tạo một form mới if a GET (or any other method) we'll create a blank form
else
form = NameForm()
return render(request, 'name.html', {'form': form})
Thông tin thêm về lớp và trường trong Django:
Tất cả các biểu mẫu của Django thì hầu như được tạo thành từ dưới dạng lớp con của một trong hai: django.forms.Form hoặc django.form.ModelForm.
Biểu mẫu khi không liên kết thì sẽ không có dữ liệu, nếu người dùng truy cập vào nó sẽ trống hoặc chứa các giá trị mặc định. Và thuộc tính is_bound sẽ cho bạn biết liệu form có dữ liệu liên kết với nó.
Trước đó chúng ta chỉ có một trường duy nhất là /your-name/ nên giờ chúng ta hãy thử với đoạn bên dưới với nhiều trường hơn: subject, message, sender.
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField(widget=forms.Textarea)
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)
Xem lại: giới thiệu về Django form Nguồn: django tutorial