宜兴市网站建设,wordpress 预览demo,线上编程课推荐哪一个,电商平台有哪些类型今日内容概要 web应用程序 手写web框架(帮助我们理解别人写好的成熟框架、重点在于思路的理解、代码无需掌握) Django框架的学习 Python中得主流框架 框架的下载、安装、版本、怎么启动、怎么使用等 三板斧问题
web应用程序 Django框架是一款专门用来开发web应用的框架 …今日内容概要 web应用程序 手写web框架(帮助我们理解别人写好的成熟框架、重点在于思路的理解、代码无需掌握) Django框架的学习 Python中得主流框架 框架的下载、安装、版本、怎么启动、怎么使用等 三板斧问题
web应用程序 Django框架是一款专门用来开发web应用的框架
什么是web? Web应用程序是一种可以通过Web访问的应用程序,用户只需要有浏览器即可不需要再安装其他软件 案例 淘宝网、京东网、博客园、等都是基于web应用的程序 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序这类应用程序一般借助IE等浏览器来运行。WEB应用程序一般是B/S模式
什么是web? Web应用程序是一种可以通过Web访问的应用程序,用户只需要有浏览器即可不需要再安装其他软件 案例 淘宝网、京东网、博客园、等都是基于web应用的程序 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序这类应用程序一般借助IE等浏览器来运行。WEB应用程序一般是B/S模式 Web应用程序的优点
1. 你所需要的只是一个适用的浏览器 2. 节省硬盘空间 3. 它们不需要更新因为所有新的特性都在服务器上执行从而自动传达到用户端 4. 过跨平台使用的例如WindowsMacLinux等等 Web应用程序的缺点 严重依赖服务端的正常运行、服务端一旦出问题、客户端里面受到影响 什么是web框架 别人写好的框架(就是一堆目录和文件),我们只需要在固定的位置写代码即可
手写web框架 1、S端的简单开发与Http协议
# S端
import socketdef make_server(ip, port, app): # 代表server# 处理套接字通信相关事宜sock socket.socket()sock.bind((ip, port))sock.listen(5)print(Starting development server at http://%s:%s/ %(ip,port))while True:conn, addr sock.accept()# 1、接收浏览器发来的请求信息recv_data conn.recv(1024)# print(recv_data.decode(utf-8))# 2、将请求信息直接转交给application处理得到返回值res app(recv_data)# 3、向浏览器返回消息此处并没有按照http协议返回conn.send(res)conn.close()def app(environ): # 代表application# 处理业务逻辑return bhello worldif __name__ __main__:make_server(127.0.0.1, 8008, app) # 在客户端浏览器输入http://127.0.0.1:8008 会报错注意请使用谷歌浏览器
目前S端已经可以正常接收浏览器发来的请求消息了但是浏览器在接收到S端回复的响应消息bhello world时却无法正常解析 因为浏览器与S端之间收发消息默认使用的应用层协议是HTTP浏览器默认会按照HTTP协议规定的格式发消息而S端也必须按照HTTP协议的格式回消息才行。 2、结合http协议改进S端 S端修订版本处理HTTP协议的请求消息并按照HTTP协议的格式回复消息
# S端
import socketdef make_server(ip, port, app): # 代表server# 处理套接字通信相关事宜sock socket.socket()sock.bind((ip, port))sock.listen(5)print(Starting development server at http://%s:%s/ %(ip,port))while True:conn, addr sock.accept()# 1、接收并处理浏览器发来的请求信息# 1.1 接收浏览器发来的http协议的消息recv_data conn.recv(1024)# 1.2 对http协议的消息加以处理简单示范如下llrecv_data.decode(utf-8).split(\r\n)head_llll[0].split( )environ{}environ[PATH_INFO]head_ll[1]environ[method]head_ll[0]# 2将请求信息处理后的结果environ交给application这样application便无需再关注请求信息的处理可以更加专注于业务逻辑的处理res app(environ)# 3按照http协议向浏览器返回消息# 3.1 返回响应首行conn.send(bHTTP/1.1 200 OK\r\n)# 3.2 返回响应头可以省略conn.send(bContent-Type: text/html\r\n\r\n)# 3.3 返回响应体conn.send(res)conn.close()def app(environ): # 代表application# 处理业务逻辑return bhello worldif __name__ __main__:make_server(127.0.0.1, 8008, app) 此时重启S端后再在客户端浏览器输入http://127.0.0.1:8008 便可以看到正常结果hello world了。 3、返回Html 我们不仅可以回复hello world这样的普通字符还可以夹杂html标签浏览器在接收到消息后会对解析出的html标签加以渲染
# S端
import socketdef make_server(ip, port, app): sock socket.socket()sock.bind((ip, port))sock.listen(5)print(Starting development server at http://%s:%s/ %(ip,port))while True:conn, addr sock.accept()recv_data conn.recv(1024)llrecv_data.decode(utf-8).split(\r\n)head_llll[0].split( )environ{}environ[PATH_INFO]head_ll[1]environ[method]head_ll[0]res app(environ)conn.send(bHTTP/1.1 200 OK\r\n)conn.send(bContent-Type: text/html\r\n\r\n)conn.send(res)conn.close()def app(environ):# 返回html标签return bh1hello web/h1img srchttps://www.baidu.com/img/bd_logo1.png/imgif __name__ __main__:make_server(127.0.0.1, 8008, app)
在上述函数app中python代码与html代码耦合到一起这是不合理的我们应该将二者分离开将html代码放入专门的文件中于是我们新建timer.html文件内容如下
!DOCTYPE html
html
headmeta charsetUTF-8titleTitle/title
/head
body
h2当前时间为2020-02-02 20:20:20/h2
/body
/html
S端程序如下
# S端
import socketdef make_server(ip, port, app): # 代表serversock socket.socket()sock.bind((ip, port))sock.listen(5)print(Starting development server at http://%s:%s/ %(ip,port))while True:conn, addr sock.accept()recv_data conn.recv(1024)llrecv_data.decode(utf-8).split(\r\n)head_llll[0].split( )environ{}environ[PATH_INFO]head_ll[1]environ[method]head_ll[0]res app(environ)conn.send(bHTTP/1.1 200 OK\r\n)conn.send(bContent-Type: text/html\r\n\r\n)conn.send(res)conn.close()def app(environ):# 处理业务逻辑打开文件读取文件内容并返回with open(timer.html, r, encodingutf-8) as f:data f.read()return data.encode(utf-8)if __name__ __main__:make_server(127.0.0.1, 8008, app) 上述S端为浏览器返回的都是静态页面内容都固定的要想返回动态页面内容是变化的那timer.html中的内容就不能写死可以定义一个特殊的符号类似于变量名然后每次用得到的值覆盖该符号即可类似于为变量赋值于是timer.html内容修改如下
!DOCTYPE html
html
headmeta charsetUTF-8titleTitle/title
/head
body
h2当前时间为{{ xxx }}/h2
/body
/html
S端修改如下
# S端
import socketdef make_server(ip, port, app): # 代表serversock socket.socket()sock.bind((ip, port))sock.listen(5)print(Starting development server at http://%s:%s/ %(ip,port))while True:conn, addr sock.accept()recv_data conn.recv(1024)llrecv_data.decode(utf-8).split(\r\n)head_llll[0].split( )environ{}environ[PATH_INFO]head_ll[1]environ[method]head_ll[0]res app(environ)conn.send(bHTTP/1.1 200 OK\r\n)conn.send(bContent-Type: text/html\r\n\r\n)conn.send(res)conn.close()def app(environ):# 处理业务逻辑import timenow time.strftime(%Y-%m-%d %H:%M:%S, time.localtime())with open(timer.html, r, encodingutf-8) as f:data f.read()data data.replace({{ xxx }}, now) # 字符串替换return data.encode(utf-8)if __name__ __main__:make_server(127.0.0.1, 8008, app) # 在浏览器输入http://127.0.0.1:8008,每次刷新都会看到不同的时间
wsgiref模块的使用
wsgiref服务器----------uwsgi服务器(uwsgi)--------Nginx服务器uwsgi服务器
wsgiref模块是一个内置的模块直接可以拿来使用无需安装 它帮助我们封装了socket部分另外它也解决了部分的高并发问题但是它能够解决的并发量并不高 他们也会帮我们把HTTP格式的数据做封装处理也就是说不需要我们在自己处理 views.py 主要用来写业务逻辑的它也称为是视图文件 urls.py 主要用来写后缀和视图函数的对应关系它也称为是路由文件 template 存储项目中用到的模板文件html文件模板文本提供了一些模板语法. 每一个框架都应用有一个入口文件Django也不例外
Django框架的学习
Python中得主流框架 Django框架最主流的市场占用率90%以上笨重的框架里面自带了很重的模块不适用于小项目类似于航空母舰 falsk框架轻量级的小而美自带的功能比较少需要安装很多的第三方模块当你安装的模块足够多的时候也差不多跟Django差不多了 tornado框架异步非阻塞、高性能、学这个框架成本有点高、解决的并发量挺高的它一般用在特殊的场景 sanic框架 fastapi框架它主要用来写一些接口不出来页面它只负责写业务逻辑 主要就来学习Django的使用
如何使用Django 1. 需要先安装: pip install django 2. 版本的问题 django1.x: 以前的老项目在使用它跟2.x的版本区别不是特别大 django2.x主流的项目使用的都是2.x的版本有一点区别的跟1.x django3.x: 新版本了现在有不少的项目确实在选择3.x的版本 # 比如drf框架要求django的版本必须是2以上不支持1的版本 讲1.x和2.x的版本注意讲1.x一块再去看2的版本 3. django的版本要和你的Python的版本要匹配django3用个2.7版本不行 django2-----python3.6以上 django1-----python3.6
4. 如何创建django项目 # 先切换路径到你想存储的位置 命令行创建: django-admin startproject 项目名称
# 在命令行执行以下指令会在当前目录生成一个名为mysite的文件夹该文件夹中包含Django框架的一系列基础文件
django-admin startproject mysite pycharm创建项目 File New project django ... 5. 注意事项: 1. 项目名称必须是英文不能是中文 2. 一个pycharm窗口只打开一个django项目 6. 如何启动项目 # 先把路径切到跟manage.py同级目录下面 命令行启动 python3 manage.py runserver python3 manage.py runserver 8001 Next, start your first app by running python manage.py startapp [app_label]. 7. 创建应用 python manage.py startapp 应用名 python manage.py startapp app01 创建完应用之后还要做一件非常重要的事情就是注册应用, 如果没有注册创建出来也没用 ************************************************************************** INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, ] ************************************************************************** 应用
Django框架就类似于是一所大学一所大学也要有二级学院 应用就类似于是二级学院一个Django框架至少要有一个应用
taobao user order address 应用名要做到见名知意符合变量的命名规则即可但是教学使用app01 02 03...
基于Django实现的一个简单示例 1url.py
from django.contrib import admin
from django.urls import path,re_path # 导入re_path
#导入views模块
from app01 import viewsurlpatterns [path(admin/, admin.site.urls), # 该行代码是新建项目时django框架自动生成的暂且忽略暂时注释掉也可以随着一步步深入介绍都会讲到它的专门用法# 新增地址http://127.0.0.1:8001/index/与index函数的映射关系re_path(r^index/$,views.index), # r^index/$会匹配url地址的路径部分
]
2视图
from django.shortcuts import render# 必须定义一个request形参request相当于我们自定义框架时的environ参数
def index(request):import datetimenowdatetime.datetime.now()ctimenow.strftime(%Y-%m-%d %X)return render(request,index.html,{ctime:ctime}) # render会读取templates目录下的index.html文件的内容并且用字典中的ctime的值替换模版中的{{ ctime }}
3模版 在templates目录下新建文件index.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
h4当前时间:{{ ctime }}/h4/body
/html 测试
python manage.py runserver 8001 # 在浏览器输入http://127.0.0.1:8001/index/ 会看到当前时间。 主要文件的介绍 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.morning.rsszk.cn.gov.cn.rsszk.cn http://www.morning.jrplk.cn.gov.cn.jrplk.cn http://www.morning.sjgsh.cn.gov.cn.sjgsh.cn http://www.morning.rbcw.cn.gov.cn.rbcw.cn http://www.morning.knmby.cn.gov.cn.knmby.cn http://www.morning.kzcfp.cn.gov.cn.kzcfp.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.incmt.com.gov.cn.incmt.com http://www.morning.c7624.cn.gov.cn.c7624.cn http://www.morning.zpnfc.cn.gov.cn.zpnfc.cn http://www.morning.ncfky.cn.gov.cn.ncfky.cn http://www.morning.frfpx.cn.gov.cn.frfpx.cn http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn http://www.morning.xjkr.cn.gov.cn.xjkr.cn http://www.morning.bqts.cn.gov.cn.bqts.cn http://www.morning.bhrbr.cn.gov.cn.bhrbr.cn http://www.morning.btpzn.cn.gov.cn.btpzn.cn http://www.morning.clndl.cn.gov.cn.clndl.cn http://www.morning.bwkhp.cn.gov.cn.bwkhp.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.wnpps.cn.gov.cn.wnpps.cn http://www.morning.hmnhp.cn.gov.cn.hmnhp.cn http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.lsnnq.cn.gov.cn.lsnnq.cn http://www.morning.ywtbk.cn.gov.cn.ywtbk.cn http://www.morning.kxbdm.cn.gov.cn.kxbdm.cn http://www.morning.prhqn.cn.gov.cn.prhqn.cn http://www.morning.webpapua.com.gov.cn.webpapua.com http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.hxxzp.cn.gov.cn.hxxzp.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn http://www.morning.tgnr.cn.gov.cn.tgnr.cn http://www.morning.tmtrl.cn.gov.cn.tmtrl.cn http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.mggwr.cn.gov.cn.mggwr.cn http://www.morning.cknws.cn.gov.cn.cknws.cn http://www.morning.fpxsd.cn.gov.cn.fpxsd.cn http://www.morning.nyqxy.cn.gov.cn.nyqxy.cn http://www.morning.qstkk.cn.gov.cn.qstkk.cn http://www.morning.daidudu.com.gov.cn.daidudu.com http://www.morning.xjkr.cn.gov.cn.xjkr.cn http://www.morning.fyxr.cn.gov.cn.fyxr.cn http://www.morning.wrdlf.cn.gov.cn.wrdlf.cn http://www.morning.zfgh.cn.gov.cn.zfgh.cn http://www.morning.lbxhy.cn.gov.cn.lbxhy.cn http://www.morning.ptqbt.cn.gov.cn.ptqbt.cn http://www.morning.rzmkl.cn.gov.cn.rzmkl.cn http://www.morning.lqklf.cn.gov.cn.lqklf.cn http://www.morning.nqypf.cn.gov.cn.nqypf.cn http://www.morning.xykst.cn.gov.cn.xykst.cn http://www.morning.ymwny.cn.gov.cn.ymwny.cn http://www.morning.rdwm.cn.gov.cn.rdwm.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.kzhxy.cn.gov.cn.kzhxy.cn http://www.morning.bpmfr.cn.gov.cn.bpmfr.cn http://www.morning.rkgyx.cn.gov.cn.rkgyx.cn http://www.morning.jcwrb.cn.gov.cn.jcwrb.cn http://www.morning.qgtfl.cn.gov.cn.qgtfl.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn http://www.morning.xjkfb.cn.gov.cn.xjkfb.cn http://www.morning.fldrg.cn.gov.cn.fldrg.cn http://www.morning.fkflc.cn.gov.cn.fkflc.cn http://www.morning.pftjj.cn.gov.cn.pftjj.cn http://www.morning.myxps.cn.gov.cn.myxps.cn http://www.morning.qxlyf.cn.gov.cn.qxlyf.cn http://www.morning.brrxz.cn.gov.cn.brrxz.cn http://www.morning.pmtky.cn.gov.cn.pmtky.cn http://www.morning.chjnb.cn.gov.cn.chjnb.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.rhkq.cn.gov.cn.rhkq.cn http://www.morning.tgnr.cn.gov.cn.tgnr.cn http://www.morning.qtnmp.cn.gov.cn.qtnmp.cn http://www.morning.jkdtz.cn.gov.cn.jkdtz.cn http://www.morning.mnlk.cn.gov.cn.mnlk.cn http://www.morning.rgwz.cn.gov.cn.rgwz.cn