web应用的简介、手撸web框架、 借助于wsgiref模块、Django框架的学习(主要文件介绍、应用、小白必会三板斧)

一、 MySQL数据库、前端

我们之前学习了数据库、前端、Python基础等三大部分,但是,他们三块的内容没有串在一起,也就没办法开发出一个完成的web项目出来,因此,我们通过Django框架把这三者融合在一起,以后我们就可以很方便的开发出各种各样的项目.

二、web应用的简介

"""是因为Django框架是一个专门用来开发web项目的框架"""
1. Web应用程序是什么Web应用程序是一种可以通过Web访问的应用程序,也就是说只需要一个浏览器即可,不需要其他软件了
2. 应用程序有两种模式C/S、B/S。Django就是开发的B/S应用程序,所以,我们就认为浏览器就是我们的客户端、Django框架就是服务端
3.  Web应用程序的优点1. 只需要一个浏览器即可,不再需要安装其他应用软件2. 节省用户的空间资源3. 它们不需要更新,是因为服务端只要一更新版本,会直接影响客户端的更新4. 跨平台使用
4. Web应用程序的缺点"""一旦web应用的服务端宕机,直接影响客户端的正常访问!!!"""什么是web框架:框架的意思就是别人提前写好的,我们只需要按照人家的要求在固定的位置写固定的代码

三、手撸web框架(推导框架的演变、代码无需掌握、重点看思路)

web应用程序主要就是B/S架构的,浏览器就是客户端、我们现在开发出一个服务端出来即可
你们就可以认为框架就是客户端的服务端
"""通过socket写出一个服务端出来"""HTTP协议的相关知识
1. 四大特性基于请求和响应基于TCP协议之上的应用层协议无状态短连接
2. 请求数据格式请求首行(请求方式、协议版本号)请求头\r\n请求体
3. 响应数据格式响应首行(响应状态码)响应头\r\n响应体
4. 响应状态码1xx2xx3xx4xx5xx如何做到在浏览器地址栏中写什么后缀就返回什么内容?思路:1. 在后端肯定是要知道你在浏览器输入了什么后缀2. 判断是什么后缀就返回什么内容conn.send(b'')
浏览器每次朝后端发起请求的时候,都会多一次:/favicon.ico
<link rel="shortcut icon" href="https://csdnimg.cn/public/favicon.ico" >存在的问题:
1. socket部分我们每次都要书写(要写重复代码)
2. 我们需要自己来处理HTTP格式的数据,自己做切分,自己来取值等比较麻烦
3. 并发问题没有解决如何去优化以上问题

四、 借助于wsgiref模块(内置模块,直接使用)

from wsgiref.simple_server import make_server解决了socket部分不用我们写了,在wsgiref模块里人家帮我们写了
它解决了并发问题 WSGIServer类------>wsgiref------>它能够解决的并发量不高----->本地使用wsgiref服务器--------------->代码上线之后,就不是有它----------->uwsgi服务器(它支持的并发量更高)它帮我们解决了什么问题:
1. socket部分就不用写了,帮我们封装到了底层里面
2. 帮助我们处理了纯原生的HTTP格式的数据,把这些数据都封装到了大字典里了env
3. 它能够解决一定的并发问题,只不过是处理的并发不是特别高def run(env, response):""":param env: 客户端每次发起请求的时候,所携带的数据都在这个里面,就类似属于是request:param response: 是后端给浏览器返回的数据:return: 返回给浏览器查看的"""print(env)  # 把HTTP格式的数据都封装到了大字典里去了response("200 OK", [])# 我们取到当前的后缀内容current_path = env.get('PATH_INFO')# 做判断if current_path == '/index':return [b'index']elif current_path == '/login':return [b'login']else:return [b'404 error']if __name__ == '__main__':server = make_server(host='127.0.0.1', port=8000, app=run)"""这句话写完就会实时监听127.0.0.1:8000这个地址只要有客户端来访问这个地址,那么,我服务端就能够接收到客户端的请求, 就类似于是我们的socket端app=run:只要有客户度发过去请求,那么就会把处理的请求交给run这个函数来处理,run是个函数名(在django中用的就是函数名)后面你要学的flask框架这个地方写的是对象,而不是函数名obj()-------------->会触发类的__call__方法--------->flask框架的启动代码就在__call__里面写着的,是入口"""启动服务端server.serve_forever()"""
views.py----------------->视图文件--------->主要就是写后端的逻辑的
urls.py------------------>路由文件(后缀)---------->路由与视图函数的对应关系
templates---------------->专门用来存储html文件的
"""以后我们要想增加一个后缀,只需要在urls.py中写一个路由和在views.py中写一个视图函数即可.

五、Django框架的学习

Django是Python中使用最多的一个主流框架!python中的主流框架:Django:主要用来开发web项目的,它比较笨重,一般小型项目不怎么使用它,大而全flask:它是一个比较轻量级的框架,它主要依赖于第三方的模块,不断的安装第三方模块,小而精tornado:异步非阻塞,解决高并发比较擅长这个框架学起来有点难度....版本问题:
1.X(老项目) 2.X(新项目) 3.X(新版本)
1.x和2.x本质上差别不是很大,但是也有区别,我们讲1.x,附带讲2.x的区别
在drf中,都要使用2.x以上版本,drf这个框架要求django的版本必须是2.x以上注意事项:
1. 你的项目名称和应用名称以及其他文件的名称都要使用英文的,坚决不能够使用中文的
2. 你的计算机名称最好都使用英文的
3. 一个pycharm窗口只打开一个django项目,不能够一个窗口打开很多个django项目如何使用Django
1. 安装django
pip install django==1.11
django版本要和解释器的版本要匹配:
django2.X版本------------>解释器的版本最后3.6以上如何验证django是否安装成功
在cmd中输入:django-admin------>如果有输出内容就说明安装成功2. 创建项目1 命令行创建"""你可以先切换路径,切换到你想把django项目放到的路径里"""django-admin startproject 项目名django-admin startproject myfirst_dj2 pycharm创建FileNew Projectdjango...
3. 如何启动项目1. 命令行启动先把路径切到manage.py所在的路径python3 manage.py runserver """项目启动起来之后,会监听:http://127.0.0.1:8000/"""默认端口号是:8000如何修改端口号:python3 manage.py runserver 127.0.0.1 80012. pycharm启动点击绿色按钮访问项目: http://127.0.0.1:8000/4. Next, start your first app by running python manage.py startapp [app_label].
"""创建应用"""如何创建应用1. 命令行创建python manage.py startapp [app_label].python manage.py startapp app01.2. pycharm创建当你把应用创建出来之后,紧接着要做的一件事情就是:注册应用
在配置文件中注册应用,这个应用才生效
****************************************************************************************
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config',  # 全称'app01',  # 简称
]
****************************************************************************************以后我们在哪里写代码呢?

六、主要文件介绍

myfirst_dj		# 项目名称app01		# 应用名称migrations	# 这个是用来存储数据库迁移记录__init__.pyadmin.py	# 跟后台项目注册等相关的apps.py		# 跟一些注册相关models.py	# 跟数据库打交道的 模型层----->MTV模型tests.py     # 测试文件views.py	# 视图文件,写一些后端逻辑
myfirst_dj__init__.pysettings.py		# 配置文件相关的urls.py			# 路由相关的wsgi.py			# 内部封装的wsgiref服务器,uwsgi服务器之后,这个文件就没用了uwsgi.pydb.sqlite3		# Django自带的小型数据库
manage.py			# Django框架的入口文件

七、应用

django主要开发的就是一款web应用!
Django框架类似于是一所大学(空壳子)应用就是大学里面的二级学院(具备独立的功能模块)
一个应用就是一个独立的功能模块
比如:userorderaddresscart...
应用名一定要见名知意,但是我们教学为了方便,我都使用app01、0203...

八、小白必会三板斧

The view app01.views.index didn't return an HttpResponse object. It returned None instead.
return HttpResponse("OK")  # 返回字符串的
return render(request, 'index.html')  # 返回html文件的
return redirect('http://www.baidu.com') # 重定向###############################自己创建的templates文件夹,要在配置文件注册################
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]###############################自己创建的templates文件夹,要在配置文件注册################

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

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

相关文章

自然语言处理从入门到应用——LangChain:模型(Models)-[文本嵌入模型Ⅱ]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 本文将介绍如何在LangChain中使用Embedding类。Embedding类是一种与嵌入交互的类。有很多嵌入提供商&#xff0c;如&#xff1a;OpenAI、Cohere、Hugging Face等&#xff0c;这个类旨在为所有这些提供一个标准接口。 …

mysql的一些知识整理

这里整理一些mysql相关的知识点&#xff0c;是自己不太熟悉的内容 varchar(n) 中 n 最大取值为多少 MySQL 规定除了 TEXT、BLOBs 这种大对象类型之外&#xff0c;其他所有的列&#xff08;不包括隐藏列和记录头信息&#xff09;占用的字节长度加起来不能超过 65535 个字节。 …

docker+Jenkins

拉取镜像 docker pull jenkins/jenkins启动容器 8080端口映射58080 jenkins_home 映射本地/data/下方便查看 docker run -d -p 58080:8080 -p 5000:50000 -v /data/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins访问ip:5…

Java多线程锁

多线程锁 本专栏学习内容又是来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 Synchronized Synchronized是Java中锁的一种实现方法&#xff0c;我们需要了解他锁在什么地方&#xff0c;锁的类型有哪些 阿里巴巴开发手册规定&#xff1a; 高并发时&#xff0c;同…

实训笔记7.26

实训笔记7.26 7.26笔记一、Hadoop大数据开发技术1.1 Hadoop的安装部署1.2 Hadoop的分布式文件存储系统HDFS1.2.1 HDFS的组成1.2.2 HDFS的操作方式1.2.3 HDFS的流程原理1.2.4 HDFS核心概念 1.3 Hadoop的分布式资源调度系统YARN1.3.1 YARN的组成1.3.2 YARN的工作流程1.3.3 YARN的…

将Spring Session存储到Redis中实现持久化

文章目录 Session持久化1. 添加依赖2. 配置redis连接信息3. 存储和读取session从Redis Session持久化 1. 添加依赖 在项目中添加session依赖和redis依赖&#xff0c;如下所示&#xff1a; <dependency><groupId>org.springframework.boot</groupId><art…

15个图像识别模型下载及优缺点分析

1、PixelCNN & PixelRNN in TensorFlow TensorFlow implementation of Pixel Recurrent Neural Networks. 地址&#xff1a;https://github.com/carpedm20/pixel-rnn-tensorflow 优点&#xff1a;这些模型是生成图像的有力工具&#xff0c;可以生成高质量的逼真图像。它们…

Pytorch个人学习记录总结 04

目录 torchvision DataLoader torchvision transforams是对单张图片进行处理&#xff0c;而制作数据集的时候&#xff0c;是需要对图像进行批量处理的。因此本节是将torchvision中的datasets和transforms联合使用对数据集进行预处理操作。 &#xff08;torchvision官方文档地…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)五:后台主页功能实现上

一、本章内容 本章实现后台主页框架实现、菜单的动态加载及生产、tab组件与菜单绑定、菜单与路由绑定等,工具栏按钮等界面及对应功能实现。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览

Stream 流式编程不常用API讲解

常用的 Stream 操作方法 FlatMap 扁平映射&#xff08;FlatMap&#xff09;&#xff1a;flatMap() 方法类似于 map() 方法&#xff0c;不同之处在于它可以将每个元素映射为一个流&#xff0c;并将所有流连接成一个流。这主要用于解决嵌套集合的情况。例如&#xff1a; List&…

vue脚手架文件说明

vue脚手架文件说明 1、文件介绍2、脚手架里面主要文件和作用 1、文件介绍 2、脚手架里面主要文件和作用 node_modules 都是下载的第三方包public/index.html 浏览器运行的网页src/main.js webpack打包的入口src/APP.vue Vue页面入口package.json 依赖包列表文件

java篇 类的进阶0x07:继承

文章目录 继承继承的语法继承的作用与特点继承与组合的区别 覆盖 overideOverride构造方法无法覆盖 super&#xff1a;和父类对象沟通的桥梁super 到底指哪个父类的实例super 严格意义上并非真的是一个父类的引用super 调用父类的构造方法子类构造方法被调用时&#xff0c;Java…

为什么 SSH(安全终端)的端口号是 22 !!

导读为什么 SSH&#xff08;安全终端&#xff09;的端口号是 22 呢&#xff0c;这不是一个巧合&#xff0c;这其中有个我&#xff08;Tatu Ylonen&#xff0c;SSH 协议的设计者&#xff09;未曾诉说的故事。 将 SSH 协议端口号设为 22 的故事 1995 年春我编写了 SSH 协议的最…

E2E工程问题:小周期转大周期Gateway

摘要&#xff1a; 本文讨论一个具体的工程问题&#xff0c;E2E报文对应的信号&#xff0c;由小周期转大周期导致的E2E校验失败问题。 工程中&#xff0c;网关节点很重要的一个功能就是路由。当然&#xff0c;E2E&#xff08;End to End&#xff09;报文也可路由&#xff0c;但…

ChatGPT在智能推送和个性化广告中的应用如何?

ChatGPT在智能推送和个性化广告领域具有广泛的应用潜力。智能推送和个性化广告是指根据用户的个性化需求和兴趣&#xff0c;精准地向用户推送相关的信息和广告内容。ChatGPT作为一种预训练的通用语言模型&#xff0c;具有强大的语言理解和生成能力&#xff0c;可以在智能推送和…

【spring boot】spring boot下代码运行逻辑

概括 springboot是一种java开发框架&#xff0c;采用注解开发形式&#xff0c;大大简化了SSM框架下的大量配置&#xff0c; 目前springboot想要实现一个功能&#xff0c;一般通用方式是建立这几个包&#xff1a;controller&#xff0c;config&#xff0c;mapper&#xff0c;e…

5分钟开发一个AI论文抓取和ChatGPT提炼应用

5分钟开发一个AI论文抓取和ChatGPT提炼应用 第一步 点击“即刻开始” -选择模板 python -修改标题 “AIPaper”&#xff0c;项目标识“AIPaper”&#xff0c;点击“创建项目” 第二步 在编程区域右侧AI区域&#xff0c;输入框输入以下内容&#xff1a; 请根据下面的内容&…

Java后端程序员不得不知道的 API 接口常识

说实话&#xff0c;我非常希望自己能早点看到本篇文章&#xff0c;大学那个时候懵懵懂懂&#xff0c;跟着网上的免费教程做了一个购物商城就屁颠屁颠往简历上写。 至今我仍清晰地记得&#xff0c;那个电商教程是怎么定义接口的&#xff1a; 管它是增加、修改、删除、带参查询&…

ELK 使用kibana查询和分析nginx日志

背景&#xff1a;使用kibana查询和分析nginx请求日志&#xff0c;方便开发人员查询系统日志和分析系统问题。 setp 1、定义Index patterns 2、定义Discover(Search 查询数据) 3、定义Visualizations 3.1 定义Vertical Bar 3.2 、Choose a source 3.3、定义图表 4、定义…

【一文搞懂】—带霍尔编码器的直流有刷减速电机

文章目录 一、直流有刷电机二、减速比三、霍尔编码器3.1 霍尔编码器3.2 霍尔编码器测速原理 四、测速程序设计4.1 跳变沿检测4.2 计算转速 一、直流有刷电机 宏观上说直流有刷电机由固定部分&#xff08;定子&#xff09;和旋转部分&#xff08;转子&#xff09;组成。在定子上…