Python之Django

news2024/12/22 19:45:29

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模块的使用

import  socket
 
server = socket.socket()
server.bind(('127.0.0.1',7890))
server.listen(3)
 
while True:
    # 等待客户端发来连接
    sock,addr = server.accept()
    data = sock.recv(1024)
 
    # 网址栏输入什么后缀就返回什么后缀
    print(data.decode('utf-8'))   #二进制转字符串
    str_data = data.decode('utf-8')
    lst_data = str_data.split(' ')
    print(lst_data)
    current_path =  lst_data[1]
 
    # 给客户端返回消息
    sock.send((b'HTTP/1.1 200 OK \r\n\r\n'))  #TCP的流水协议,短时间内一次性接收多个数据
 
    if current_path == 'index':
        sock.send(b'index')
    elif current_path == '/home':
        sock.send(b'home')
    # 存在问题:自己转码,自己切分,自己取值,没有解决高并发问题等等
 
    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():
 

    with open('a.txt','r',encoding='utf-8')as f:
        return f.read()
    
# def index():
#     return 'from index'
 
def home():
    return  'from home'
 
def login():
    return 'from login'
 
def register():
    return 'from register'

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


from views import *
 
urls = (
    ('/index',index),
    ('/home',home),
    ('/login',login),
    ('/register',register),
)

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

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

wsgiref模块:

from wsgiref.simple_server import make_server
 
from urls import urls
def run(env,response):
    """
    :param env:请求来的时候,携带的请求数据都在这个里面
    :param response:服务端给客户端响应的数据
    :return:返回客户端显示的
    """
    response('200 OK',[])
    print(env)
    current_path = env.get('PATH_INFO')
 
    func = None
    for url in urls:
        if current_path == url[0]:
            func = url[1]  # 后缀对应的函数名
            break
 
    if func:
        res=func()
        return [res.encode('utf-8')]
    else:
        return [b'404 error']
 
 
if __name__ == '__main__':
    sever = make_server('127.0.0.1',7000,app=run)   # WSGIServer类的对象
    """
        1、会实时监听'127.0.0.1':7890这个地址,只有客户端来连接就会做出响应
        2、app=run:当有客户端请求过来的时候,会把该请求交给run函数来处理,不要加()
        3、django中这里写的是函数名,当请求来的时候,会调用这个函数,函数加括号
        4、如果是flask框架,app后写的是对象,当请求来时会交给这个对象处理,只不过变成了对象加括号
            类()--->触发__init__执行
            对象() --->实例化---->__call__的执行---->里面写的是falsk框架的源码入口位置
    """
    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主要文件的介绍



 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1185598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录 Day40 动态规划08 LeetCodeT198打家劫舍 T213打家劫舍II T337 打家劫舍III

动规五部曲: 1.确定dp数组含义 2.确定递推公式 3.初始化dp数组 4.确定遍历顺序 5.打印数组排错 LeetCode T198 打家劫舍 题目链接:198. 打家劫舍 - 力扣(LeetCode) 题目思路: 今天我们走出背包问题,开始进入新一轮经典问题的学习:打家劫舍问题. 题目大概…

8款提高小团队协作效率的app软件,你用过几款?

团队协作在当下的职场中变得司空见惯,当不同的头脑相聚到一起,很快就会产生新的项目想法,并为最棘手的挑战找到解决方案。因此,当整个团队参与决策时,这是成功的保证。 然而,要达到这种程度的协调往往会感…

【广州华锐互动】VR影视制片虚拟仿真教学系统

随着虚拟现实(VR)技术的不断发展,VR在影视制片教学中的应用场景也变得越来越丰富。本文将介绍VR在影视制片教学中的常见应用场景及其意义,并通过案例分析来更好地展示其应用前景。 在影视制片教学中,VR可以提供一种沉浸式的制作体验。其中&am…

你真的会开发测试框架?

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

STM32两轮平衡小车原理详解(开源)

一、引言 关于STM32两轮平衡车的设计,我想在读者阅读本文之前应该已经有所了解,所以本文的重点是代码的分享和分析。至于具体的原理,我觉得读者不必阅读长篇大论的文章,只需按照本文分享的代码自己亲手制作一辆平衡车&#xff0c…

SPASS图表的制作

基础条形图搭建 打开数据集 变量设置 点击图形->图形构建器,确认 然后设置标题 最终结果展示如图: 自我构建条形图 展示的结果如下:

【Node.js入门】1.2 部署Node.js开发环境

1.2 部署Node.js开发环境 在 Windows 系统上安装 Node.js 两种文件格式的安装包 Windows安装包(.msi)Windows二进制文件(.exe)安装包 检查Node.js版本 node --version 在 Linux 系统上安装 Node.js Linux操作系统上安装Nod…

自然语言处理(一):RNN

「循环神经网络」(Recurrent Neural Network,RNN)是一个非常经典的面向序列的模型,可以对自然语言句子或是其他时序信号进行建模。进一步讲,它只有一个物理RNN单元,但是这个RNN单元可以按照时间步骤进行展开…

发电机综合特性测试仪

发电机综合特性测试仪是可以测量发电机的电压、电流、功率因数、频率等参数,以评估发电机的质量和性能。可以测量发电机的输出电压,以确保其符合规定的标准和要求。测量发电机的输出电流,以确定其负载能力和稳定性。可以测量发电机的功率因数…

我是如何快速入门音视频开发的?

最近有读者留言,说“想转行音视频开发,怎么做”,正巧,前几天我还在知乎上,看到有人在问音视频的学习资料,还是个大一的学生。 想说一句:真有眼光。 如今这个时代,想赚钱&#xff0c…

2010年07月13日 Go生态洞察:通过通信来共享内存

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

霍尼韦尔pda手持终端 移动护理终端pda扫描手持机

pda手持终端的特点:具有数据存储及计算能力,能与其它设备进行数据通讯,具有 专业条码扫描,能够快速、准确采集各种一/二维码、破损码、弯折码、屏幕码等光学图形条码。有可拆卸4600mAh聚合物锂电池,续航有保障。 And…

【小白专用】VSCode下载和安装与配置PHP开发环境(详细版) 23.11.08

1. 下载VSCode2. 解决VSCode下载速度特别慢3. 安装VSCode 一、VSCode介绍 VSCode 是一款由微软开发且跨平台的免费源代码编辑器;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。 二、官方下载地址…

剑指JUC原理-15.ThreadLocal

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

基于指数分布算法的无人机航迹规划-附代码

基于指数分布算法的无人机航迹规划 文章目录 基于指数分布算法的无人机航迹规划1.指数分布搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用指数分布算法来优化无人机航迹规划。 …

传感器融合是什么?及其类型和应用

什么是传感器融合? 目前,几乎各行各业都在使用传感器:在汽车、工厂,甚至我们的智能手机中,都有传感器的身影。虽然单个传感器本身就可以提供有用的数据,但如何能同时从多个传感器的输出中提取信息呢&#…

Bean的四种实例化方式以及BeanFactory和FactoryBean的区别

2023.11.8 Spring为Bean提供了多种实例化方式,通常包括4种方式。 第一种:通过构造方法实例化第二种:通过简单工厂模式实例化第三种:通过factory-bean实例化第四种:通过FactoryBean接口实例化 通过构造方法实例化 创…

MySQL基础操作

注:mysql是大小写不敏感的. 1.数据库基础操作(展示) //1.展示当前数据库 show databases;//2.创建数据库 create database 数据库名;//3.使用数据库 use 数据库名;//4.删除数据库 drop database 数据库名;2.SQL中基本类型 2.1 数值类型(整数和浮点型) 注:decimal和numeric…

cortex-A7核IIC实验--采集温湿度传感器的值

1.IIC总线---同步串行半双工 1)一根数据线SDA--PF15,一根时钟线SCL--PF14 2)传输速率:低速:100K 中速:400K 全速:3.4M 3)外接两个上拉电阻的作用:总线空闲状态时&am…

浅谈顺序表基本操作

🤷‍♀️🤷‍♀️🤷‍♀️ 今天给大家带来的是数据结构——顺序表的实现(增删查改)。 清风的CSDN博客主页 🎉欢迎👍点赞✍评论❤️收藏 😛😛😛希望我的文章能对你有所帮助&#xff…