Django模块笔记【三】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/topics/

*该笔记将对各个模块进行单独介绍

*Forms 

1. 使用表单(Working with forms)

只要网站涉及到访问者的输入操作,那么就必须用到表单。在HTML中,表单是<form>...</form>中的语句集合。

GET和POST是HTTP处理表单仅有的两种方式。Django中使用Form类表示表单。

对使用方法进行简单举例:

1 # forms.py
2 
3 from django import forms
4 
5 class NameForm(forms.Form):
6     your_name = forms.CharField(label='Your name', max_length=100)
 1 # view.py
 2 
 3 from django.shortcuts import render
 4 from django.http import HttpResponseRedirect
 5 
 6 from .forms import NameForm
 7 
 8 def get_name(request):
 9     # if this is a POST request we need to process the form data
10     if request.method == 'POST':
11         # create a form instance and populate it with data from the request:
12         form = NameForm(request.POST)
13         # check whether it's valid:
14         if form.is_valid():
15             # process the data in form.cleaned_data as required
16             # ...
17             # redirect to a new URL:
18             return HttpResponseRedirect('/thanks/')
19 
20     # if a GET (or any other method) we'll create a blank form
21     else:
22         form = NameForm()
23 
24     return render(request, 'name.html', {'form': form})
1 # name.html
2 
3 <form action="/your-name/" method="post">
4     {% csrf_token %}
5     {{ form }}
6     <input type="submit" value="Submit" />
7 </form>

2. 表单集合(Formsets)

Formsets可以一次性创建多个表格。使用举例如下:

 1 >>> import datetime
 2 >>> from django.forms.formsets import formset_factory
 3 >>> from myapp.forms import ArticleForm
 4 >>> ArticleFormSet = formset_factory(ArticleForm, extra=2)
 5 >>> formset = ArticleFormSet(initial=[
 6 ...     {'title': 'Django is now open source',
 7 ...      'pub_date': datetime.date.today(),}
 8 ... ])
 9 
10 >>> for form in formset:
11 ...     print(form.as_table())
12 <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Django is now open source" id="id_form-0-title" /></td></tr>
13 <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-12" id="id_form-0-pub_date" /></td></tr>
14 <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" id="id_form-1-title" /></td></tr>
15 <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" id="id_form-1-pub_date" /></td></tr>
16 <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title" /></td></tr>
17 <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date" /></td></tr>

在formset_factory中还可以添加max_num,validate_max,can_order,can_delete属性,Formset还具有is_valid()方法。


3. 从模型创建表单

举例如下:

 1 >>> from django.forms import ModelForm
 2 >>> from myapp.models import Article
 3 
 4 # Create the form class.
 5 >>> class ArticleForm(ModelForm):
 6 ...     class Meta:
 7 ...         model = Article
 8 ...         fields = ['pub_date', 'headline', 'content', 'reporter']
 9 
10 # Creating a form to add an article.
11 >>> form = ArticleForm()
12 
13 # Creating a form to change an existing article.
14 >>> article = Article.objects.get(pk=1)
15 >>> form = ArticleForm(instance=article)

4. 表单资产(Form Assets)

核心内容:css,js,media, widget,略过。

-- The End --

原文地址:https://www.cnblogs.com/py-drama/p/4623466.html