• Django01


    一:WEB应用

    什么是WEB应用?

    用浏览器访问的应用程序

    优点:

    • 不需要客户端,只需要一个浏览器
    • 直接在服务端更新,客户端感受不到
    • 耗费用户的硬盘空间少
    • 跨平台性强,直接用浏览器就可以访问

    缺点:

    • 强调浏览器的适用性(不同的浏览器,样式不同)
    • 用户的数据都保存在软件厂商那边

    二:BS、CS架构

    BS:Browser-Server(浏览器-服务端)

    CS:Client-Server(客户端-服务端)

    BS的本质还是CS

    三:手写一个WEB应用

    客户端是浏览器,服务端自己写(Python)

    演化过程

    1.最初的版本 - 客户端与服务端

    服务端.py
    import socket
    
    s = socket.socket()
    s.bind(('127.0.0.1', 8080))
    s.listen(5)
    
    conn, addr = s.accept()
    data = conn.recv(1024)
    conn.send(b'Hello')
    print(data.decode('UTF-8'))
    
    conn.close()
    s.close()
    
    客户端.py
    import socket
    
    client = socket.socket()
    client.connect(('127.0.0.1', 8080))
    
    client.send('Hello'.encode('UTF-8'))
    
    data = client.recv(1024)
    print(data.decode('UTF-8'))
    
    client.close()
    

    2.浏览器版本1 - 接收浏览器发送的数据

    服务端.py
    import socket
    
    s = socket.socket()
    s.bind(('127.0.0.1', 8080))
    s.listen()
    
    conn, addr = s.accept()
    data = conn.recv(1024)
    conn.send(b'Hello')
    print(data.decode('UTF-8'))
    
    conn.close()
    s.close()
    
    浏览器 输入IP地址和端口号
    127.0.0.1:8080
    
    浏览器发起请求 - 此处可以看出请求里面的所有内容

    浏览器的页面 - 无法显示服务器端发来的内容

    3.浏览器版本2 - 发送数据到浏览器

    服务端.py
    import socket
    
    s = socket.socket()
    s.bind(('127.0.0.1', 8080))
    s.listen(5)
    while True:
        conn, addr = s.accept()
        print('=======>', addr)
        data = conn.recv(1024)
        print(data.decode('UTF-8'))
    
        conn.send('HTTP/1.1 200 OK
    
    Hello'.encode('UTF-8'))	# 按照HTTP协议特定的格式传输数据
    
        conn.close()
    
    s.close()
    
    HTTP的传输格式
    HTTP/1.1 200 OK
    Content-Type: text/html;charset=utf-8
    k1:v1
    k2:v2
    k3:v3
    
    Hello
    
    浏览器页面 - 可以显示服务端发来的内容

    4.浏览器版本3 - 发送更多格式的数据到浏览器

    服务端.py
    import socket
    
    s = socket.socket()
    s.bind(('127.0.0.1', 8080))
    s.listen(5)
    while True:
        conn, addr = s.accept()
        print('=======>', addr)
        data = conn.recv(1024)
        print(data.decode('UTF-8'))
    
        conn.send('HTTP/1.1 200 OK
    Content-Type: text/html;charset=utf-8
    
    '.encode('UTF-8'))
        with open('index.html', mode='rb') as f:
            for line in f:
                conn.send(line)
    
        conn.close()
        
    s.close()
    
    index.html - 将要发送的内容放进一个文件中
    <h1>Hello World</h1>
    <p style="color:rgba(255,104,104,0.7);">你好呀!</p>
    
    浏览器页面 - 可以显示服务端发送的内容,并且可以显示样式

    5.浏览器版本4 - 直接打开html文件

    将上面的content.txt重命名为content.html,然后直接用浏览器打开

    动态页面 和 静态页面

    静态页面:

    静态的HTML,内容不会改变,每次访问 看到的数据都一样

    动态页面:

    页面的数据会发生变化,每次访问 看到的可能都不一样(数据来源:数据库)

    实现一个动态页面:

    # index.html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h2>{{time}}</h2>
    </body>
    </html>
    
    import socket
    
    s = socket.socket()
    s.bind(('127.0.0.1', 8080))
    s.listen(5)
    while True:
        conn, addr = s.accept()
        print('=======>', addr)
        data = conn.recv(1024)
        print(data.decode('UTF-8'))
    
        import time
    
        ctime = time.time()  # 可能是数据库里面查询出来的
        with open('index.html', 'r', encoding='UTF-8') as f:
            data = f.read().replace('{{time}}', str(ctime))
        response = 'HTTP/1.1 200 OK 
    
     %s' % data
        conn.send(response.encode('UTF-8'))
    
        conn.close()
    

    四:HTTP协议

    HTTP:超文本传输协议

    详细:http://www.xuexianqi.top/archives/417.html

    1.请求协议

    三部分:请求首行、请求头、请求体

    2.响应协议

    三部分:响应首行、响应头、响应体

    3.HTTP协议的特性

    ① 基于TCP/IP协议之上的应用层协议

    ② 基于:请求 - 响应 模式

    ③ 无保存状态

    4.响应状态码

    状态码 释义
    1xx 接收到请求,正在处理(用户一般看不到)
    2xx 请求成功(200)
    3xx 重定向(301 302)访问一个地址,跳转到另一个地址
    4xx 客户端出错(404)
    5xx 服务端出错(502)

    5.URL - 统一资源定位符

    ① 什么是URI?

    URI(Uniform Resource Identifiers),HTTP使用URI来传输数据和建立连接。

    ② 什么是URL?

    URL(Uniform Resource Locator),中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。

    URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。

    ③ URL的组成部分

    以下面这个URL为例,介绍下普通URL的各部分组成

    http://www.xuexianqi.top:80/archives/286.html?name=root&pwd=123#top1
    

    部分 参数 作用 是否必须
    协议 http:// 代表网页使用的是HTTP协议。
    在Internet中可以使用多种协议,如HTTP,FTP等等

    但是浏览器会自动补全
    域名 www.xuexianqi/top 解析到真实的IP地址
    也可以直接填写IP地址
    端口号 80 跳转到对应的端口号的应用程序
    http默认端口为80
    https默认端口为442
    虚拟目录 archives 虚拟目录部分,一般用于分类
    文件名 286.html 读取域虚拟目录下的某一个文件
    参数 ?name=root&pwd=123 携带搜索和查询的内容
    参数可以用多个&连接
    锚点 #top1 用于定位到页面中的某一个部分

    五:WEB框架

    web框架就是在中的十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率

    有一些底层代码,别人已经写好了。我们只需要在这些基础上,继续开发。

    • urls.py - 路由:路径和对应函数的映射关系
    • views.py - 视图函数:一堆函数
    • models.py - 数据库操作相关

    六:基于wsgiref写1个WEB框架

    • socket:自己写,借助socket模块,已实现了socket

    • wsgiref:django默认使用的

    • 在web框架上继续开发

      以后路径都去urls.py中写

      路径匹配以后执行的函数,都放在views.py

      数据库相关操作,在models.py中

    from wsgiref.simple_server import make_server
    
    
    def server(environ, start_response):  # 必须传两个参数
        # environ:是字典,http请求拆成字典,请求方式,请求地址,请求头。。。
        # start_response:响应对象,响应状态码,响应头放到里面
    
        start_response('200 OK', [('Content-Type', 'text/html')])
        if environ.get('PATH_INFO') == '/index':  # 请求地址
            data = 'Index Page'.encode('utf-8')
    
        elif environ.get('PATH_INFO') == '/login':
            data = 'Login Page'.encode('utf-8')
        else:
            data = b'<h1>Hello Web</h1>'
        return [data]
    
    
    if __name__ == '__main__':
        # app是可调用对象,可以加括号执行的(函数内存地址)
        myserver = make_server('127.0.0.1', 8081, server)  # 只要客户端发送一次请求,就会调用server()
        myserver.serve_forever()  # 服务就起来了,相当于之前写的socket一直监听8081端口
    

    七:Django介绍

    Django框架是PythonWeb三大主流框架之一,以其功能强大全面而受到众多开发者追捧,现如今Django已经更新到3版本,但是并不推荐使用,更多建议使用1版本。

    Django版本 Python版本
    1.11 2.7、3.4、3.5、3.6、3.7(在1.11.17中添加)
    2.0 3.4、3.5、3.6、3.7
    2.1 3.5、3.6、3.7
    2.2 3.5、3.6、3.7、3.8(在2.2.8中添加)
    3.0、3.1 3.6、3.7、3.8

    八:Django和其他WEB框架的区别

    python中主流web框架:django,flask,tornado(性能高),sanic,fastapi...

    WEB框架 Socket 路由关系映射 模板渲染
    自制的web框架 第三方wsgiref 自己写 自己写
    Django 第三方wsgiref 自己写 自己写
    Flask 第三方 自己写 第三方
    Tornado 自己写 自己写 自己写

    九:Django的安装与简单使用

    1.Django的安装

    方式1:命令行

    在命令行中输入:pip3 install django==版本号(不输入版本号,默认安装最新版3.X)

    方式2:PyCharm

    PyCharm右下角 - Interpreter Settings - +号 - 搜索:django - 选择版本号 - 点击:Install package

    方式3:Terminal

    PyCharm下方的Terminal输入:pip3 install django==版本号(不输入版本号,默认安装最新版3.X)

    2.安装完毕后,会生成一个:django-admin的命令

    该命令在Python解释器的Script文件夹中,该文件夹在安装Python解释器的时候,已经添加到环境变量中了。

    3.创建Django项目

    方式1:命令行

    django-admin startproject 项目名
    

    方式:PyCharm

    File - New Project - Django

    4.创建app

    方式1:命令行

    ![](https://gitee.com/xuexianqi/img/raw/master/img/image-20200927084102297.png)
    

    方式2:PyCharm

    十:需要注意的点

    1.如果开了多个django项目,监听的端口可能是同一个,需要修改端口

    2.计算机名和路径不要出现中文、空格

    3.Django项目中,顶格写的代码,一启动Django项目,该代码就会执行

  • 相关阅读:
    《Think in Java》(十四)类型信息
    《Think in Java》(十三)字符串
    《Think in Java》(十二)通过异常处理错误
    《Think in Java》(十七)容器深入研究
    《Think in Java》(十一)持有对象
    集合框架概览
    Gulp 自动化构建过程
    自动化打包 CSS
    更新 Node 稳定版本命令
    mac 命令行打开vscode
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/13844843.html
Copyright © 2020-2023  润新知