【Django 教程1】Web框架

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

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

查看所有标签

猜你喜欢:

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

Clean Architecture

Clean Architecture

Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99

Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

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

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具