Django(一、简介,安装与使用)
文章目录
- 一、Django引入
- 1.web应用程序
- 什么是web?
- web引用程序的优点
- web应用程序的缺点
- 什么是web框架
- 2.纯手写web框架
- 1.web框架的本质
- 2.HTTP协议的特性:
- 3.编写
- 基于wsgire模块搭建web框架
- 代码封装优化
- 代码封装
- 二、Django框架的学习
- 1.Python中的主流框架
- 2.如何使用Django:
- 1.版本问题
- 2.运行Django注意事项
- 3.下载
- 4.验证
- 5.常见命令
- 6.pycharm自动创建django项目
- 3.Django app的概念
- 创建应用
- 注册应用
- Django小白必会三板斧
一、Django引入
1.web应用程序
什么是web?
web应用程序是一种可以通过web访问的应用程序,用户只需有浏览器即可,不需要再安装其他软件
比如:淘宝网、京东网、博客园等都是基于web应用的程序
应用程序有两种模式C/S、B/S
C/S是客户端/服务端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务端应用程序,这类应用程序一般借助IE等浏览器来运行。web应用程序一般是B/S模式
web引用程序的优点
- 你所需要的就只是一个适用的浏览器
- 节省硬盘空间
- 它们不需要更新,因为所有的新特性都在服务器上执行,从而自动传达到用户端
- 可以跨平台使用:windows,Mac,Linux等等
web应用程序的缺点
严重依赖服务端正常运行,一旦服务端出现问题,客户端就会受到影响
什么是web框架
被人写好的框架(就是一堆文件和目录),我们只需要在固定的位置写代码即可
2.纯手写web框架
1.web框架的本质
web框架本质上可以看成是一个功能强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端。两者通过网络请求实现数据交互,学者们也可以从架构层面上先简单的将Web框架看做是对前端、数据库的全方位整合
2.HTTP协议的特性:
1.四大特性
基于请求响应
基于TCP协议之上的应用层协议
无状态
短连接
2.请求数据格式
请求首行(请求方式、协议、版本号、路径)
请求头
\r\n
请求体
\r\n
请求体(get请求方式是没有请求体的、POST请求方式才有请求体)
3.响应数据格式
响应首行()
响应头
\r\n
响应体()
4.响应状态码
1xx
2xx
3xx
4xx
5xx
3.编写
import socketserver = socket.socket() # 默认是TCP协议
server.bind(('127.0.0.1', 8800)) # IP PORT
server.listen(3) # 半连接池while True:sock, addr = server.accept() # 等待连接data = sock.recv(1024) # 字节bytessock.send(b'http/1.1 200 ok\r\n\r\n') data_str = data.decode() # 转码data_list = data_str.split(' ')[1] # 切分后索引取值print(data_list)if data_list == '/index':sock.send(b'hello index')elif data_list == '/login':sock.send(b'hello login')else:sock.send(b'hello home')
当前的服务端存在什么问题?
- socket部分需要每次都需要我们自己写
- 我们需要自己每次处理HTTP格式的数据,自己转码、切分、取值等
- 没有解决高并发问题
以上的问题怎么优化呢?
借助于wsgiref模块的使用
基于wsgire模块搭建web框架
from wsgiref.simple_server import make_serverdef run(request, response):""":param request: 请求相关数据:param response: 响应相关数据:return: 返回给客户端的真实数据"""response('200 OK', []) # 固定格式 不用管它# print(request) 是一个处理之后的大字典path_info = request.get('PATH_INFO')if path_info == '/index':return [b'index']elif path_info == '/login':return [b'login']return [b'hello wsgiref module']if __name__ == '__main__':server = make_server('127.0.0.1', 8080, run) # 实时监听127.0.0.1:8080 一旦有请求过来自动给第三个参数加括号并传参数调用server.serve_forever() # 启动服务端
代码封装优化
1.网址后缀的匹配问题
2.每个后缀匹配成功后执行的代码有多有少面条版 函数版 模块版
3.将分支的代码封装成一个个函数
4.将网址后缀与函数名做对应关系
5.获取网址后缀循环匹配
6.如果想新增功能只需要先写函数再添加一个对应关系即可
7.根据不同的功能拆分成不同的py文件views.py 存储核心业务逻辑(功能函数)urls.py 存储网址后缀与函数名对应关系templates目录 存储html页面文件
8.为了使函数体代码中业务逻辑有更多的数据可用将request大字典转手传给这个函数(可用不用但是不能没有)
代码封装
1.逐次拆分出来
模块封装功能
from wsgiref import simple_serverdef run(request, response):""":param request: 请求相关的数据:param response: 响应相关的数据:return: 返回给客户端的展示数据"""response('200 OK', []) # 固定编写 无需掌握 return [b'hello jason']if __name__ == '__main__':server = simple_server.make_server('127.0.0.1', 8080, run)'''监听本机8080端口 一旦有请求访问 自动触发run方法的执行'''server.serve_forever()
# 模块封装了socket代码并将请求数据处理成诸多k:v键值对
路由对应响应
# run函数体中添加下列代码
current_path = request.get("PATH_INFO")
if current_path == '/login':return [b'hello login html']
elif current_path == '/register':return [b'hello register html']
return [b'404 error']
2.封装成函数
def register(request):return 'register'def login(request):return 'login'def error(request):with open(r'templates/error.html', 'r', encoding='utf8') as f:return f.read()urls = (('/login',login),('/register',register)
)def run(request, response):func_name = Nonefor url_tuple in urls: if current_path == url_tuple[0]:# 先获取对应的函数名func_name = url_tuple[1]# 一旦匹配上了 后续的对应关系就无需在循环比对了break# for循环运行完毕之后 func_name也有可能是Noneif func_name:res = func_name(request)else:res = error(request) # 顺手将request也传给函数 便于后续数据的获取return [res.encode('utf8')]
将后缀匹配单独做一个模块
# 后缀匹配
urls = (('/register', register),('/login', login),('/index', index),
)
服务端启动文件
from wsgiref import simple_server
from urls import urls
from views import errordef run(request, response):response('200 OK', []) current_path = request.get("PATH_INFO")func_name = Nonefor url_tuple in urls: # ('/register', register)if current_path == url_tuple[0]:func_name = url_tuple[1]breakif func_name:res = func_name(request)else:res = error(request) return [res.encode('utf8')]if __name__ == '__main__':server = simple_server.make_server('127.0.0.1', 8080, run)server.serve_forever()
请求后缀相对应的响应
def register(request):return 'register'def login(request):return 'login'def index(request):return 'index'def error(request):with open(r'templates/error.html', 'r', encoding='utf8') as f:return f.read()
总结拆分后要是想新增一个功能,只能在view.py中编写函数,urls.py添加对应关系即可
3.模板文件和静态文件
templates文件夹 存储HTML文件
static文件夹 存储HTLML页面所需静态资源
二、Django框架的学习
1.Python中的主流框架
Django框架:最主流的,市场占用率90%以上,笨重的框架,里面自带了很重的模块,不适用于小项目,类似于航空母舰
falsk框架:轻量级的,小而美,自带的功能比较少,需要安装很多的第三方模块,当你安装的模块足够多的时候,也差不多跟Django差不多了
tornado框架:异步非阻塞、高性能、学这个框架成本有点高、解决的并发量挺高的,它一般用在特殊的场景
fastapi框架:它主要用来写一些接口,不写页面,他只负责写业务逻辑
2.如何使用Django:
1.版本问题
django 1.x 同步 1.11
django 2.x 同步 2.2 常用
django 3.x 支持异步 3.2
django 4.x 支持异步 4.2
版本之间的差异其实不大,主要是添加了额外的功能
2.运行Django注意事项
1.django项目中所有的文件名目录名不要出现中文
2.计算机名称尽量不要出来中文
3.一个pycharm尽量就是一个完整的项目(不要嵌套和叠加)
4.不同版本的python解释器与不同版本的django可以会出现问题
3.下载
pip3 install django 默认最新版
pip3 install django版本号 指定版本
pip3 install django2.2.22
pip下载模块会自动解决依赖问题(会把关联需要用到的模块一下下载)
4.验证
django-admin
5.常见命令
1.创建django项目django-admin startproject 项目名
2.启动django项目cd 项目名python38 manage.py runserver ip:port
6.pycharm自动创建django项目
pycharm会自动创建django项目,但是配置文件中可能会报错,需要改目录配置os.path.join(BASE_DIR,'templates')
3.Django app的概念
Django框架就类似于是一所大学,一所大学也要有二级学院
应用就类似于是二级学院,一个Django框架至少要有一个应用
创建应用
1.终端命令创建应用
python38 manage.py startapp 应用名
2.pycharm创建应用
新建Django项目的时候默认创建一个,并且会自动注册应用
注册应用
在你的Django项目里找到settings.py文件,找到INSTALLED_APPS列表,添加应用名
Django主要目录结构
django2 项目名称app01 应用名称migrations 用来存储数据库迁移记录__init__.py admin.py 跟后台项目注册相关apps.py 跟一些注册相关models.py 数据库 模型层tests.py 测试文件views.py 视图文件,写一些后端逻辑
django2__init__.py settings.py 配置相关urls.py 路由相关wsgi.py 内部封装wsgiref服务器
templates 模型文件夹,需手动创建,pycharm自动创建
db.sqlite3 Django自带的小型数据库
manage.py Django框架的入口文件
Django小白必会三板斧
frpm django.shortcuts import render,HttpResponse,redirectHttpResponse 返回字符串类型的数据
render 返回HTML页面并且支持传值
redirect 重定向
相关文章:

Django(一、简介,安装与使用)
文章目录 一、Django引入1.web应用程序什么是web?web引用程序的优点web应用程序的缺点什么是web框架 2.纯手写web框架1.web框架的本质2.HTTP协议的特性:3.编写基于wsgire模块搭建web框架代码封装优化代码封装 二、Django框架的学习1.Python中的主流框架2…...

【Linux C IO多路复用】多用户聊天系统
目录 Server-Client mutiplexingServer mutiplexingClient mutiplexing Server-Client 在Linux系统中,IO多路复用是一种机制,它允许一个进程能够监视多个文件描述符(sockets、pipes等)的可读、可写和异常等事件。这样…...

JSON——数组语法
一段JSON可能是以 ”{“ 开头 也可能仅包含一段JSON数组 如下 [ { "name" : "hello,world"}, {"name" : "SB JSON”}, {“name” : "SB互联网房地产CNM“}, ] 瞧,蛋疼不...CJSON过来还是得搜下网…...

运营商大数据精准获客:我们提供精准客源渠道的最大资源体?
运营商大数据精准营销 谈起精准获客,竞争对手永远是为我们提供精准客源渠道的最大资源体! 最新的获客方式,就是从竞争对手的手中把他们的精准客户资源变为自己的。 今年最火的运营商大数据精准营销是拒绝传统营销方式的烧钱推广࿰…...
表象变换与矩阵元
表象变换 一维粒子哈密顿量 表象中的矩阵元 态的表象变换 不难证明 算符的表象变换 坐标表象 Non-denumerable basis...
vue乾坤微前端项目
1、主应用 安装乾坤 npm i qiankun -S 注册微应用并启动: import { registerMicroApps, start } from qiankun;//设置两个微应用 registerMicroApps([{name: vue1, //要跟package.json中的name保持一致entry: //localhost:8081, //本地就这么写container: #cont…...

大语言模型比武
今年随着 ChatGPT 的流行,并在各个领域有一定程度生产级别的应用。国内外也掀起了一股大语言模型浪潮,各大厂商都推出了自己的大语言模型,阿里推出了 通义千问,腾讯推出了 Hunyuan,亚马逊云推出了 Titan,大…...
王道数据结构第五章二叉树的遍历第13题
目录 解题思路 宏定义 二叉树定义 栈定义 实现函数 测试代码 测试结果...
微服务的发展历程的详细说明及每个阶段主流的架构和组件
微服务的发展历程的详细说明及每个阶段主流的架构和组件如下: 一、微服务的发展历程: 起始阶段:这个阶段主要是面向服务的架构(SOA)的兴起。此时,企业开始尝试将单体应用拆分为多个服务,但此时…...

2023年眼镜行业分析(京东眼镜销量数据分析):市场规模同比增长26%,消费需求持续释放
随着我国经济的不断发展,电子产品不断普及,低龄及老龄人口的用眼场景不断增多,不同年龄阶段的人群有不同的视力问题,因此,视力问题人口基数也随之不断加大,由此佩戴眼镜的人群也不断增多。 同时,…...
基础课26——业务流程分析方法论
基础课25中我们提到业务流程分析方法包括以下几种: 价值链分析法:主要是找出或设计出哪些业务能够使得客户满意,实现客户价值最大化的业务流程。要进行价值链分析的时候可以从企业具体的活动进行细分,细分的具体方面可以从生产指…...

【数字图像处理-TUST】实验二-图像噪声生成与滤波降噪
一,题目 读入一幅图像使用两种以上的方法向图像中分别添加噪声输出一幅二值图像,背景为黑色,噪声区域为白色使用三种滤波方法对上述添加了噪声的图像进行降噪处理输出降噪处理后的结果图像 二,实验原理 采用了两种方法添加了噪…...

bilibili快速升满级(使用Docker 容器脚本)
部署bilibili升级运行容器脚本 docker run --name"bili" -v /bili/Logs:/app/Logs -e Ray_DailyTaskConfig__Cron"30 9 * * *" -e Ray_LiveLotteryTaskConfig__Cron"40 9 * * *" -e Ray_UnfollowBatchedTaskConfig__Cron"…...

Android 13.0 Settings主页面去掉FocusRecyclerView相关功能
1.前言 在13.0的系统rom产品定制化开发中,在系统Settings主页面的主菜单中,在测试某些功能的时候,比如开启护眼模式和改变系统密度会在主菜单第一项的网络菜单头部增加 自定义您的设备和设置护眼模式时间安排 等等相关的设置模块 这对于菜单布局显示相当不美观,所以根据系…...

Python(四)字符串
程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…...
WPF中ElementName与RelativeSource绑定的局限性以及对策
完全来源于十月的寒流,感谢大佬讲解 <Window x:Class"Test_01.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…...

基于PHP语言的会员系统搭建(Docker版)
1、操作系统 准备: ubuntu22机器 基础:docker:【精选】Docker微服务-基础_v2/_catalog-CSDN博客 2、安装Docker # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/…...

文件改名:一次性解决文件名混乱,批量重命名技巧
在日常生活和工作中,我们经常会遇到文件名混乱的问题,例如文件名重复、格式不统一或者文件名错误等。这些问题不仅会给我们带来查找和使用上的困扰,还会影响我们的工作效率。为了解决这些问题,我们可以使用批量重命名技巧…...

app自动化测试——capability 配置参数解析
一、Capability 简介 功能:配置 Appium 会话,告诉 Appium 服务器需要自动化的平台的应用程序 形式:键值对的集合,键对应设置的名称,值对应设置的值 主要分为三部分 公共部分 ios 部分 android 部分 二、Session Appi…...
数仓面经大框架
1.计算机及编程基础: 操作系统:进程、线程等 数据结构:算法题 计算机网络:分层等 Linux:常用的指令 MySQL(重点) Java/Python基础 排序算法(快排、归并等) 2.大数…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...