标签:style blog class c code tar
最近两天下了班,没事学习了django的开发,今天做个总结。其实大家可以从百度,google搜到一些django的入门视频,初步了解一下django的框架。学习一些基础的概念和知识。本篇主要是对自己这两天做的做个总结。
1.创建第一个views.py
上一篇文章我们在windows上搭建好了django的开发环境并建立一个测试demo。
在settings.py的同级目录下新建views.py目录。并输入以下代码
from django.http import HttpResponse
def index(req):
context="This is main page!!!"
return HttpResponse(context)在urls.py 安装如下更改
urlpatterns = patterns(‘‘,
# Examples:
# url(r‘^$‘, ‘drophome.views.home‘, name=‘home‘),
# url(r‘^blog/‘, include(‘blog.urls‘)),
url(r‘^admin/‘, include(admin.site.urls)),
url(r‘^index/‘,‘drophome.view.index‘),这时在浏览器里打开127.0.0.1:8000/index 就可以看到我们第一个view啦。在django的开发中我们主要采用mvc的模式即Models,view和control。但是这里的views.py更像control。在urls.py中是通过指定的url的对应view的index的函数。在urls.py 中指定的url是采用python中的正规表达式的形式,方便扩展。
2.利用Templates模板来格式化显示
在创建一个view.py后我们是HttpResponse来直接输出字符串的,如果想要输出更多,更复杂的内容就会很麻烦,要在代码写一些无关的html的标签。为此django提供了templats模板的概念,如下是一个模板的样本
<html>
<head>
<title></title>
</head>
<body>
<h1>{{context}}</h1>
<table>
{% for k,v in items %}
<tr>
<td>
{{k}}
</td>
<td>
{{ v}}
</td>
</tr>
{% endfor %}
</table>
</body>
</html>可以保存为index.html从文件结构上和标准的html文档没什么差别。但是多了{{context}},和{% for .. %} 的东西。
期中{{ xxxx }} 表示为template的变量,所以的变量都是用{{ }} 来比标示,{% for k,v in items %} 是嵌入式的python的语句。用{% xxx %} 可以嵌入式python的语句。支持for,if,等python语句。那如果在view中使用template中呢。
from django.shortcuts import render_to_response
def display_meta(req):
values=req.META.items()
values.sort()
return render_to_response("index.html",{"items":values},)其实{{context}}我们没有给他传值,因此它不会显示,也不会报错。我们把从req获取的meta数据传给了items让他在index里面显示。
要使用template还要在settings里添加如下代码
TEMPLATE_DIRS=(os.path.join(BASE_DIR,"templates"),)
并在该项目的同级目录创建tempaltes的目录,存放index.html 模板文件。
3.Django的form的使用
在django中使用表单有两种方式:1.使用template用html定义form。2.使用django的forms类来创建模板。两种创建模板的方式都是简单方便。
首先使用template的方式创建form
<html>
<head>
<title>Contact us</title>
</head>
<body>
<h1>Contact us</h1>
{% if errors %}
<ul>
{% for error in errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
<form action="/contact/" method="post">
<p>Subject: <input type="text" name="subject"></p>
<p>Your e-mail (optional): <input type="text" name="email"></p>
<p>Message: <textarea name="message" rows="10" cols="50"></textarea></p>
<input type="submit" value="Submit">
</form>
</body>
</html>在以上的html的中用html的form标签做了一个form,我我们看看如果在view处理这个form。
def contact2(request):
errors = []
if request.method == ‘POST‘:
if not request.POST.get(‘subject‘, ‘‘):
errors.append(‘Enter a subject.‘)
if not request.POST.get(‘message‘, ‘‘):
errors.append(‘Enter a message.‘)
if request.POST.get(‘email‘) and ‘@‘ not in request.POST[‘email‘]:
errors.append(‘Enter a valid e-mail address.‘)
if not errors:
# send_mail(
# request.POST[‘subject‘],
# request.POST[‘message‘],
# request.POST.get(‘email‘, ‘noreply@example.com‘),
# [‘siteowner@example.com‘],
# )
return HttpResponseRedirect(‘/contact/thanks/‘)
return render_to_response(‘contact_form.html‘,
{‘errors‘: errors})在view中可以直接通过request.POST.get(‘subject‘,‘‘)方式来获取form里面的value。
用Django的form类来创建表单,在django提供了form类,实现方式和model的类似。
from django import forms
class ContactForm (forms.Form):
subject=forms.CharField(max_length=32)
email = forms.EmailField(required=False)
message = forms.CharField(widget=forms.Textarea)
def clean_message(self):
msg=self.cleaned_data[‘message‘]
num_rows=len(msg.split())
if num_rows<2:
raise forms.ValidationError("Not enough words!")
return msg以上就是通过继承forms.Form 实现form。我们可以通过实现clean_filed 的形式针对每个字段做自定义校验。也可以设置每个字段的属性。例如message = forms.CharField(widget=forms.Textarea)在view中如果使用这个表单。
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(‘/contact/thanks/‘)
else:
form = ContactForm( initial= {‘subject‘:‘I love this site‘})
return render_to_response(‘contact2.html‘, {‘form‘: form})也可以在view中初始化form。
看看template的html的展示时如何使用form
<html>
<head>
<title>Contact us</title>
</head>
<body>
<h1>Contact us</h1>
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<form action="" method="post">
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit">
</form>
</body>
</html>4.在Django中建立models
在django中提供建模的models类。我们可以通过继承该类既可以实现创建一个表。
windows上Python开发--3.Django的基础知识,布布扣,bubuko.com
windows上Python开发--3.Django的基础知识
标签:style blog class c code tar
原文地址:http://blog.csdn.net/xcy2011sky/article/details/26339263