• Python之Django


    web应用程序

    # Django框架是一款专门用来开发web应用的框架

    # Web应用程序是一种可以通过浏览器访问的应用程序, B/S架构

               案例:淘宝网、京东...

    # 应用程序有两种模式:

            C/S:客户端/服务器端程序,这类程序一般独立运行       

            B/S:浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行        

          

    # Web应用程序的优点:

            1. 你所需要的只是一个适用的浏览器
            2. 节省硬盘空间
            3. 它们不需要更新,因为所有新的特性都在服务器上执行,从而自动传达到用户端;
            4. 过跨平台使用的例如Windows,Mac,Linux等等

    # Web应用程序的缺点:

            """严重依赖服务端的正常运行、服务端一旦出问题、客户端里面受到影响"""

    # web框架:别人写好的框架(就是一堆目录和文件),我们只需要在固定的位置写代码即可

    手写web框架(理解)

    # web应用程序是B/S架构的,我们需自己写一个服务端、然后让浏览器作为客户端即可

       怎么样去写一个服务端? socket编程

    # 在网址栏中输入什么后缀就返回什么后缀:

                1. 服务端要知道你网址栏里输入的是什么后缀
                2. 服务端做判断,然后做对应的返回

    # 存在的问题:

            1. socket部分需要我们自己每次都要写
            2. 我们需要自己每次处理HTTP格式的数据,自己转码、自己切分、自己取值等
            3. 没有解决高并发问题

       优化问题------>wsgiref模块的使用

    1. import  socket
    2.  
    3. server = socket.socket()
    4. server.bind(('127.0.0.1',7890))
    5. server.listen(3)
    6.  
    7. while True:
    8.     # 等待客户端发来连接
    9.     sock,addr = server.accept()
    10.     data = sock.recv(1024)
    11.  
    12.     # 网址栏输入什么后缀就返回什么后缀
    13.     print(data.decode('utf-8'))   #二进制转字符串
    14.     str_data = data.decode('utf-8')
    15.     lst_data = str_data.split(' ')
    16.     print(lst_data)
    17.     current_path =  lst_data[1]
    18.  
    19.     # 给客户端返回消息
    20.     sock.send((b'HTTP/1.1 200 OK \r\n\r\n'))  #TCP的流水协议,短时间内一次性接收多个数据
    21.  
    22.     if current_path == 'index':
    23.         sock.send(b'index')
    24.     elif current_path == '/home':
    25.         sock.send(b'home')
    26.     # 存在问题:自己转码,自己切分,自己取值,没有解决高并发问题等等
    27.  
    28.     sock.close()

    HTTP协议的特性

    1. 四大特性:* 基于请求响应
                          * 基于TCP协议之上的应用层协议
                          * 无状态
                          * 短链接    
    2. 请求数据格式:# 请求首行(请求方式、协议、版本号、路径)
                                 # 请求头
                                 # \r\n
                                 # 请求体(get请求方式是没有请求体的、POST请求方式才有请求体)
    3. 响应数据格式: * 响应首行()
                                  * 响应头
                                  *   \r\n
                                  *   响应体()
    4. 响应状态码: 1xx、2xx、 3xx、 4xx、 5xx

    wsgiref模块的使用

    wsgiref服务器---------->uwsgi服务器(uwsgi)-------->Nginx服务器+uwsgi服务器

    # wsgiref模块是一个内置的模块,直接可以拿来使用,无需安装

    # 它帮助我们封装了socket部分,也解决了部分的高并发问题,会帮我们把HTTP格式的数据      做封装处理,也就是说不需要我们在自己处理

    views.py: 主要用来写业务逻辑的,它也称为是视图文件def index():
     

    1.     with open('a.txt','r',encoding='utf-8')as f:
    2.         return f.read()
    3.     
    4. # def index():
    5. #     return 'from index'
    6.  
    7. def home():
    8.     return  'from home'
    9.  
    10. def login():
    11.     return 'from login'
    12.  
    13. def register():
    14.     return 'from register'

    urls.py :主要用来写后缀和视图函数的对应关系,它也称为是路由文件

    1. from views import *
    2. urls = (
    3. ('/index',index),
    4. ('/home',home),
    5. ('/login',login),
    6. ('/register',register),
    7. )

    template:存储项目中用到的模板文件,html文件,模板文本,提供了一些模板语法.

    """每一个框架都应用有一个入口文件,Django也不例外"""

    wsgiref模块:

    1. from wsgiref.simple_server import make_server
    2.  
    3. from urls import urls
    4. def run(env,response):
    5.     """
    6.     :param env:请求来的时候,携带的请求数据都在这个里面
    7.     :param response:服务端给客户端响应的数据
    8.     :return:返回客户端显示的
    9.     """
    10.     response('200 OK',[])
    11.     print(env)
    12.     current_path = env.get('PATH_INFO')
    13.  
    14.     func = None
    15.     for url in urls:
    16.         if current_path == url[0]:
    17.             func = url[1]  # 后缀对应的函数名
    18.             break
    19.  
    20.     if func:
    21.         res=func()
    22.         return [res.encode('utf-8')]
    23.     else:
    24.         return [b'404 error']
    25.  
    26.  
    27. if __name__ == '__main__':
    28.     sever = make_server('127.0.0.1',7000,app=run)   # WSGIServer类的对象
    29.     """
    30.         1、会实时监听'127.0.0.1':7890这个地址,只有客户端来连接就会做出响应
    31.         2、app=run:当有客户端请求过来的时候,会把该请求交给run函数来处理,不要加()
    32.         3、django中这里写的是函数名,当请求来的时候,会调用这个函数,函数加括号
    33.         4、如果是flask框架,app后写的是对象,当请求来时会交给这个对象处理,只不过变成了对象加括号
    34.             类()--->触发__init__执行
    35.             对象() --->实例化---->__call__的执行---->里面写的是falsk框架的源码入口位置
    36.     """
    37.     sever.serve_forever()  # 启动框架

    Django框架的学习

    # python主流框架:
    Django框架:最主流的,市场占用率90%以上,笨重的,自带了很多模块,不适用于小项目
    flask框架:轻量级的,小而美,自带功能比较少,需要安装很多第三方模块,当安装模块足 够多时,也跟Django差不多笨重了
    torna框架:异步非阻塞,高性能、学这个框架成本高,解决并发量高,一般用于特殊场景
    sanic框架
    fastapi框架:主要用来写一些接口,不出来页面,只负责写业务逻辑

    Django的使用:

    1. 需要先安装: pip install django

    2. 版本的问题:
                django1.x: 以前的老项目在使用,它跟2.x的版本区别不是特别大
                django2.x:主流的项目使用的都是2.x的版本,有一点区别的跟1.x
                django3.x: 新版本了,现在有不少的项目确实在选择3.x的版本
             # 比如:drf框架要求django的版本必须是2以上,不支持1的版本

    3. django的版本要和你的Python的版本要匹配:
                            django2----->python3.6以上
                            django1----->python3.6

    4. 如何创建django项目:# 先切换路径到你想存储的位置
          命令行创建:
                    django-admin startproject 项目名称
                     django-admin startproject myfirst

        pycharm创建项目: File---->New project-----> django ...

    5. 注意事项:
                1. 项目名称必须是英文,不能是中文
                2. 一个pycharm窗口只打开一个django项目

    6. 启动项目:  # 先把路径切到跟manage.py同级目录下面
         命令行启动:
                    python3 manage.py runserver
                    python3 manage.py runserver 8001  #修改端口

    7. 创建应用:
                 python manage.py startapp 应用名
                 python manage.py startapp app01

    # 创建完应用之后,还要做一件非常重要的事情,就是注册应用

    # 打不开的话,在setting里面设置

                'DIRS': [os.path.join(BASE_DIR, 'templates')]

    应用的概念
    Django框架就类似于是一所大学,一所大学也要有二级学院
    应用就类似于是二级学院,一个Django框架至少要有一个应用

    taobao
        user
        order
        address
        """应用名要做到见名知意,符合变量的命名规则即可,但是,教学使用app01 02 03..."""

    Django主要文件的介绍



     

    1. mysecond                    # 项目名称
    2.     app01                      # 应用名称
    3.         migrations           # 它是迁移数据的记录
    4.         __init__.py
    5.         admin.py             # django自带的后台管理系统
    6.         apps.py               # 暂且忽略,写一些注册的东西
    7.         models.py           # 模型层,跟数据库打交道的,以后创建表就在这里写
    8.         tests.py               # 测试脚本
    9.         views.py              # 视图文件,主要用来写核心的业务逻辑的
    1.     mysecond
    2.         __init__.py
    3.         settings.py            # Django的全局配置文件
    4.         urls.py                  # 路由文件,写地址的后缀和视图函数的对应关系
    5.         wsgi.py                # wsgiref服务器
    6.     templates                 # 存储HTML文件的
    7.     db.sqlite3                 # Django自带的小型数据库
    8.     manage.py               # Django的启动文件,入口文件

  • 相关阅读:
    数字人的未来:数字人对话系统 Linly-Talker + 克隆语音 GPT-SoVITS
    Git版本管理
    JVM参数设置
    @KafkaListener注解详解(一)| 常用参数详解
    【C语言程序设计】实验 3
    行业现状?互联网公司为什么宁愿花20k招人,也不愿涨薪留住老员工~
    Pytorch创建张量
    攻防世界---misc---心仪的公司
    2022年10月31日-11月6日(ue5 pak收尾)
    SpringBoot SpringBoot 原理篇 1 自动配置 1.14 自动配置思想
  • 原文地址:https://blog.csdn.net/xionghaiziya/article/details/134298132