【Django 教程1】Web框架

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

内容简介:在上面的例子里,显示的数据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框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

深入理解Nginx

深入理解Nginx

陶辉 / 机械工业出版社 / 2013-4-15 / 89.00元

本书是阿里巴巴资深Nginx技术专家呕心沥血之作,是作者多年的经验结晶,也是目前市场上唯一一本通过还原Nginx设计思想,剖析Nginx架构来帮助读者快速高效开发HTTP模块的图书。 本书首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍如何开发HTTP模块(含HTTP过滤模块)来得到定制的Nginx,其中包括开发一个功能复杂的模块所需要了解的......一起来看看 《深入理解Nginx》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

正则表达式在线测试