Saya baru saja mulai bekerja dengan Django yang berasal dari Spring MVC selama bertahun-tahun dan implementasi formulir terasa sedikit gila. Jika Anda tidak terbiasa, formulir Django dimulai dengan kelas model formulir yang mendefinisikan bidang Anda. Musim semi juga dimulai dengan objek dukungan bentuk. Tetapi di mana Spring menyediakan taglib untuk mengikat elemen formulir ke objek dukungan dalam JSP Anda, Django memiliki widget formulir yang diikat langsung ke model. Ada widget default tempat Anda dapat menambahkan atribut style ke bidang Anda untuk menerapkan CSS atau mendefinisikan widget khusus sepenuhnya sebagai kelas baru. Semuanya ada dalam kode python Anda. Sepertinya itu gila bagi saya. Pertama, Anda menempatkan informasi tentang tampilan Anda langsung di model Anda dan kedua Anda mengikat model Anda ke tampilan tertentu. Apakah saya melewatkan sesuatu?
EDIT: Beberapa kode contoh seperti yang diminta.
Django:
# Class defines the data associated with this form
class CommentForm(forms.Form):
# name is CharField and the argument tells Django to use a <input type="text">
# and add the CSS class "special" as an attribute. The kind of thing that should
# go in a template
name = forms.CharField(
widget=forms.TextInput(attrs={'class':'special'}))
url = forms.URLField()
# Again, comment is <input type="text" size="40" /> even though input box size
# is a visual design constraint and not tied to the data model
comment = forms.CharField(
widget=forms.TextInput(attrs={'size':'40'}))
Spring MVC:
public class User {
// Form class in this case is a POJO, passed to the template in the controller
private String firstName;
private String lastName;
get/setWhatever() {}
}
<!-- JSP code references an instance of type User with custom tags -->
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!-- "user" is the name assigned to a User instance -->
<form:form commandName="user">
<table>
<tr>
<td>First Name:</td>
<!-- "path" attribute sets the name field and binds to object on backend -->
<td><form:input path="firstName" class="special" /></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName" size="40" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save Changes" />
</td>
</tr>
</table>
</form:form>