【前言】 写一遍django的入门例子,基于MVC设计模式,本程序有输入,处理,输出。开始用django搬运互联网上的数据。简单介绍一下什么是MVC模式。MVC就是把程序成分3部分职责。
【MVC】 V(View):系统的界面,django中就是网页。UI部分,用于接受用户的数据,输出用户的数据。 M(Model): 处理用户输入的数据,对数据进行加工。django中就是py文件中的方法。 C(Control):处理用户的功能请求,分配给不同的模块进行处理。django中就url的分发。
【功能概要】 提供一个表单,接受用户输入的数据(输入V),将用户的数据写出到数据库中(处理M),并将写入的结果显示在网页上(输出V)。这就是数据搬运的一个简单流程,在此最基本的模式上,会衍生出数据库的CRUD(增加,查询,更新,删除)操作。
【HTTP】 [code] [08/Mar/2014 14:53:01] “GET /search/?name=%E9%83%9D%E5%BB%BA&email=sheng@verup.cn HTTP/1.1” 200 17 [/code]
这个是有两个输入项目表单提交的一条HTTP的get请求。 【CGI】 上面的那条Http的get请用,可以用各种类型的CGI程序去处理,比如说java,C,C++,PHP,ruby,python.可但是,功能最全打字越少,快速的处理HTTP请求,Get和Post的语言最好,先举出一个C语言写的CGI程序。
[code]
[/code]
[code]
#include
int main(int argc, char** argv) { char *data; printf(“Content-type:text/html;charset=gb2312\n\n”); data = getenv(“QUERY_STRING”); return 0; } [/code]
“Content-type:text/html;charset=gb2312\n\n” 这个必须有,声明MIME类型。没有的话,结果网页无法正常显示,因为浏览器不知道程序输出的是什么。
上面的变量data就是用户发送过来的字典数据,从“&”符号分开的key pair数据,没一对数据的key和value在用“等号分割”
GET /search/?name=sheng&email=tee168@qq.com name=sheng & email=tee168@qq.com
用户需要先对”&”符号进行split,判断有多少组数据,然后在对每一组的数据进行“=”split,得到最后的数据,如下 char* name=”sheng”; char* email=”tee168@qq.com”;
得到了key和value
【视图实现(View)】 本功能数据的源头就是用户从表单输入的输入,所以视图V一部分是HTML表单。另外一部分是对用户在网页上发出的http请求的响应处理,python的CGI程序。 [code]
[/code]
在接受到用户输入的数据后,会对用户的数据进行处理, [code] from hotwords.models import Author
def GetAuthorInfo(request): return render_to_response(‘Author.html’)
def search(request): if ‘key’ in request.GET: message = request.GET[‘name’] + request.GET[‘email’]
对表输入的插入,删除,修改是常用的DB操作,map和list,这也都是主要的数据搬用动作,也是很没意思的部分。但是,你还得写。
【CRUD】
【模型(M)】 使用django的ORM,通过定义数据对象类来创建数据库的table,几乎就不用再直接SQL打交道了。下面就。。。看!
[code] from django.db import models from django.contrib import admin
class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField()
[/code]
看到了没一共就两个字段,运行如下命令:
[code] python manage.py syncdb [/code]
django就会在数据库中创建名author表格。
[code] +——-+————-+——+—–+———+—————-+ | Field | Type | Null | Key | Default | Extra | +——-+————-+——+—–+———+—————-+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(50) | NO | | NULL | | | email | varchar(75) | NO | | NULL | | +——-+————-+——+—–+———+—————-+ [/code]