【Django 教程1】Web框架

栏目: Python · 发布时间: 7年前

内容简介:在上面的例子里,显示的数据content 是硬编码到代码里的,如果数据存在文件最开始的网站就是这样的,所有数据存在文件里。

【Django 教程1】Web框架

Web框架

Django 是一个Web开发框架,在仔细研究Django之前,先理解下Web框架的作用。 如果没有框架,可以用 Python 提供的库完成一个简单的网站,在页面上显示"Hello World"。运行 下面的代码,然后在浏览器输入:http://localhost:8888/ 就能看到页面上会显示"Hello World". 这是一个HTTP Server, 把我们想要的内容传到了客户端,如果要理解这过程是怎么完成的需要网络和网络协议相关知识。

import http.server
PORT = 8888

class MyHandler(http.server.SimpleHTTPRequestHandler):

    def do_GET(self):
        self.send_response(http.server.HTTPStatus.OK)
        # can read content from file or database
        content = b"Hello World"
        self.send_header("Content-type", "text/html; charset=%s" % "utf-8")
        self.send_header("Content-Length", str(len(content)))
        self.end_headers()
        self.wfile.write(content)


def run(server_class=http.server.HTTPServer, handler_class=MyHandler):
    server_address = ('', PORT)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()


if __name__ == '__main__':
    print('start server')
    run()

在上面的例子里,显示的数据content 是硬编码到代码里的,如果数据存在文件 /tmp/test.html 里面我们可以把第9行改成:

content = open('/tmp/test.html','rb').read()

最开始的网站就是这样的,所有数据存在文件里。

如果要根据用户的输入显示不同的内容又该怎么实现呢? 如果用户想修改服务端的数据又该如何? 不同用户登录一个网站会看到不同的内容又该如何实现呢? 我们怎么知道用户是否已经登陆了呢?

上面这些问题,都可以我们自己写代码完成,但这些问题的处理过程都有很多相似支出,而且在不同的地方是通用的,所以我们可以进行抽象。比如上面的 do_GET 方法,我们不确定的只是content的的内容是读数据库还是读文件,但其他的都是一样的,是不是可以提供个接口就好,其他的内容不要每次都写,比如这样

import http.server
PORT = 8888

class MyHandler(http.server.SimpleHTTPRequestHandler):

    def do_GET(self):
        self.send_response(http.server.HTTPStatus.OK)
        # can read content from file or database
        content = self.get_content()
        self.send_header("Content-type", "text/html; charset=%s" % "utf-8")
        self.send_header("Content-Length", str(len(content)))
        self.end_headers()
        self.wfile.write(content)

    def get_content(self):
        return b"Hello World"


def run(server_class=http.server.HTTPServer, handler_class=MyHandler):
    server_address = ('', PORT)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()


if __name__ == '__main__':
    print('start server')

如果要从数据库里读,只需要继承MyHandler 然后重写 get_content ,类似这样的事情,就是Web框架做的,让代码可重用,让工程师更专注的解决业务问题。

如果有Web框架,该如何实现上面的Hello World呢?先用Flask来做例子吧,相对简单。首先安装Flask

pip install Flask

实现如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(port=8888)

这看起来简单,清爽很多。

Django 简介

为了了解更多Web框架的知识,我想Django是一个比较好的对象,主要有下面几个原因。 Django 是 Python Web开发框架中比较重的一个,而且是一个传统的MVC框架,导致Django不太那么流行,特别是大型的Web应用。但Django封装了很多模块,涉及到Web开发的方方面面,所以如能比较透彻的理解Django 做了哪些封装,为什么要做,如何做到的对全面理解Web开发是有好处的,而且Django对于开发简单的小型应用很有效率。Flask在某种程度上和Django很像,了解Django对了解其他框架,甚至对其他语言的框架也有帮助。另外Django 有比较完善的文档,活跃的社区,官网显示Django社区有来自 162个国家的一万多人。阅读这些文章,需要有Python 的基础知识,有一定的Web知识,知道HTML,CSS,HTTP等等。

【Django 教程1】Web框架


以上所述就是小编给大家介绍的《【Django 教程1】Web框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

水平营销

水平营销

[美] 菲利普·科特勒、费尔南多・德・巴斯 / 陈燕茹 / 中信出版社 / 2005-1 / 25.00元

《水平营销》阐明了相对纵向营销而言的的水平营销的框架和理论。引入横向思维来作为发现新的营销创意的又一平台,旨在获得消费者不可能向营销研究人员要求或建议的点子。而这些点子将帮助企业在产品愈加同质和超竞争的市场中立于不败之地。 《水平营销》提到: 是什么创新过程导致加油站里开起了超市? 是什么创新过程导致取代外卖比萨服务的冷冻比萨的亮相? 是什么创新过程导致巧克力糖里冒出了玩具......一起来看看 《水平营销》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试