Django超级简单的MVC实例

2.6k 词

【前言】
写一遍django的入门例子,基于MVC设计模式,本程序有输入,处理,输出。开始用django搬运互联网上的数据。简单介绍一下什么是MVC模式。MVC就是把程序成分3部分职责。

【MVC】
V(View):系统的界面,django中就是网页。UI部分,用于接受用户的数据,输出用户的数据。
M(Model): 处理用户输入的数据,对数据进行加工。django中就是py文件中的方法。
C(Control):处理用户的功能请求,分配给不同的模块进行处理。django中就url的分发。

【功能概要】
提供一个表单,接受用户输入的数据(输入V),将用户的数据写出到数据库中(处理M),并将写入的结果显示在网页上(输出V)。这就是数据搬运的一个简单流程,在此最基本的模式上,会衍生出数据库的CRUD(增加,查询,更新,删除)操作。

以上这些动作,基本都是熟能生巧的技术工作,某种角度来说,就是模式化重复的体力活,不同的是,django可以快速的完成这些任务,短小精干,并且快速。

【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 <stdio.h>
#include <stdlib.h>
#include <string.h>

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]

www.verup.cn
[/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’]

    name = request.GET['name']
    email = request.GET['email']
    #在创建Author的models后,就会有对应的Autor对象产生(参考【模型(M)】)
    #引用Author的models,创建构造对象,调用一下save()方法,就完成了一条记录的插入,创造一个author对象,相当于表格的一条记录,用表单传入的数据,去构造对象,完成一条表记录的插入。
    author = Author(1, name, email)
    author.save()
    return HttpResponse(message)

[/code]

对表输入的插入,删除,修改是常用的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()

    def __unicode__(self):
            return self.name

[/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]

作者:糖果