1. HttpRequest对象包含当前请求URL的一些信息:
属性/方法 | 说明 | 举例 | request.path | 除域名以外的请求路径,以正斜杠开头 | "/hello/" | request.get_host | 主机名(比如,通常所说的域名) | "172.0.0.1:8000"or "www.example.com" | request.get_full_path() | 请求路径,可能包含查询字符串 | "/hello/?print=true" | request.is_secure | 如果通过HTTPS访问,则此方法返回True,否则返回False | True或者False |
2. 有关request的其他信息:
request.META是一个Python字典,包含了所有本次HTTP请求的Header信息。
这个字典中几个常见的键值:
HTTP_REFERER, HTTP_USER_AGENT, REMOTE_ADDR
request.GET和request.POST,二者都是类字典对象,可以通过它们来访问
GET和POST数据。
3.
POST数据是来自HTML中的<form>标签提交的,而GET数据可能来自<form>提交也可能
是URL中的查询字符串(the query string)。
4. 一个简单的例子:
在books app中
4.1 建立好models.py,建立好数据库
4.2 建立好App,并添加到settings.py文件中
INSTALLED_APPS = (
'mysite.books',
)
4.3 添加好模板的路径,在settings.py中设置
import os
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'books').replace('\\','/'),
)
4.4 添加好url
4.5 添加视图(views.py):
from django.shortcuts import render_to_response
def search_form(request):
return render_to_response('search_form.html')
from django.http import HttpResponse
from django.shortcuts import render_to_response
from mysite.books.models import Book
def search(request):
errors = []
if 'q' in request.GET :
q = request.GET['q']
if not q:
errors.append('Enter a search term.')
elif len(q) > 20:
errors.append('Please enter at most 20 characters.')
else:
books = Book.objects.filter(title__icontains=q)
return render_to_response('search_results.html',{'books':books, 'query':q})
return render_to_response('search_form.html', { 'errors': errors })
4.6 html显示
search_form.html
<html>
<head>
<title>Search</title>
</head>
<body>
{% if errors %}
<ul>
{% for error in errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
<form action="" method="get">
<input type="text" name="q">
<input type="submit" value="Search">
</form>
</body>
</html>
这里的action="",代表了和当前请求在同一级目录。
search_results.html
<p>You searched for:<strong>{{ query }}</strong></p>
{% if books %}
<p>Found {{ books|length }} book{{ books|pluralize }}.</p>
<ul>
{% for book in books %}
<li>{{ book.title }}</li>
{% endfor %}
</ul>
{% else %}
<p>No books matched your search criteria.</p>
{% endif %}
5. 第一个Form类
Django带有一个form库,称为django.forms
这个类做了几件事情:
a. 将自己显示成HTML
新建一个contacts app,并建立一个forms.py,代码如下
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(min_length=5,max_length=100)
email = forms.EmailField(required=False, label='Your e-mail address')
message = forms.CharField(widget=forms.Textarea)
def clean_message(self):
message = self.cleaned_data['message']
num_words = len(message.split())
if num_words < 4:
raise forms.ValidationError('Not enough words!')
return message
b. 提供验证
>>> from contact.forms import ContactForm
>>> f = ContactForm()
>>> print f
>>> print f.as_ul()
>>> print f.as_p()
>>> print f['subject']
>>> f = ContactForm({'subject':'Hello', 'email':'adrian@example.com', 'message':'Nice site!'})
>>> f.is_bound
>>> f.is_valid()
>>> f['subject'].errors
>>> f=ContactForm({'subject':'Hello','message':''})
>>> f.errors
2 contacts app中的views.py
from django.core.mail import send_mail
from django.shortcuts import render_to_response
from mysite.contacts.forms import ContactForm
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email', 'noreply@example.com'),
['siteowner@example.com'],
)
return HttpResponseRedirect('/contacts/thanks/')
else:
form = ContactForm(
initial={'subject':'I love your site!'})
return render_to_response('contact_form.html',{'form':form})
3. html(contact_form.html)
<html>
<head>
<title>Contact us</title>
<style type="text/css">
ul.errorlist{
margin:0;
padding:0;
}
.errorlist li {
background-color:red;
color:white;
display:block;
font-size:10px;
margin:0 0 3px;
padding:4px 5px;
}
</style>
</head>
<body>
<h1>Contact us</h2>
{% if form.errors %}
<p style="color:red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<form action="" method="post">
{% csrf_token %}
<div class="field">
{{ form.subject.errors}}
<label for="id_subject">Subject:</label>
{{form.subject}}
</div>
<div class="field">
{{ form.email.errors }}
<label for="id_email">Your e-mail address:</label>
{{ form.email }}
</div>
<div class="field">
{{ form.message.errors }}
<label for="id_message">Message:</label>
{{ form.message }}
</div>
<input type="submit" value="submit">
</form>
</body>
</html>
分享到:
相关推荐
Django提供了一套强大的表单处理机制,包括表单类的定义、表单数据的验证以及渲染表单。这一章会讲解如何创建和使用表单,处理用户提交的数据。 6. **Chapter 6:用户认证与权限** Django内置了用户认证系统,...
5. "chapter4":这可能是一个章节的目录或者是一个包含多个子文件的文件夹,继续扩展对Django FBV的讨论,或者涵盖与FBV相关的其他主题,如中间件、模板响应或表单处理。 **详细知识点**: 1. **FBV(Function-...
10. **表单处理**:在Django中,可以通过`forms.py`定义表单类,用于处理用户输入的数据验证和提交。这些表单可以与视图结合,实现如搜索、注册、登录等交互功能。 通过这个【基于Django的小说网站】项目,开发者...
在本项目中,可能包含如`Novel`(小说)、`Author`(作者)、`Chapter`(章节)等模型,用于存储小说的相关信息。模型类通常位于`models.py`文件中,包含了字段类型、验证规则等。 3. Django URLs与Views: URL...
7. **表单(Form)**:Django提供了处理用户输入的强大表单系统,用于验证和处理数据。后台管理中,表单常用于添加、编辑或删除数据。 8. **权限与认证**:Django内置的用户认证系统可实现用户注册、登录、权限控制...
6. **表单处理**:学习如何处理用户提交的表单数据,验证输入,并与数据库进行交互。 7. **错误处理和中间件**:理解如何处理HTTP错误,以及如何使用中间件来添加额外的功能,如日志记录、身份验证或请求处理。 8....
6. **Chapter 20**:这可能是关于Web开发的内容,如使用Python的Flask或Django框架构建简单的Web应用。讲解了路由、模板渲染、表单处理和数据库集成等基本概念。 7. **Chapter 13**和其他未提及的章节可能涵盖更多...
它包含了丰富的功能,如ORM(对象关系映射)用于数据库操作,强大的管理后台,以及表单处理和验证机制。Django的文档详尽,拥有庞大的社区支持和众多第三方库,因此适合构建复杂的、数据库驱动的网站。然而,Django...