当前位置: 首页 > news >正文

网站建立快捷方式宁波关键词排名优化平台

网站建立快捷方式,宁波关键词排名优化平台,网站建设维护服务协议,电商平台总体设计方案Flask第三方组件非常全#xff0c;适合小型 API服务类项目#xff0c;但第三方组件运行稳定性相对Django差。 基础知识 Flask安装 pip install flask2.0.3Flask库文件 Jinjia2#xff1a;模板渲染库Markupsafe#xff1a;返回安全标签 只要Flask返回模板或者标签时都会…Flask第三方组件非常全适合小型 API服务类项目但第三方组件运行稳定性相对Django差。 基础知识 Flask安装 pip install flask2.0.3Flask库文件 Jinjia2模板渲染库Markupsafe返回安全标签 只要Flask返回模板或者标签时都会依赖Werkzeug德文工具 底层是基于 WSGIFlask项目启动都是基于WerkzeugitsDangerous: 安全地对数据进行签名以确保其完整性。用于保护Flask的会话CookieClick用于编写命令行应用程序的框架提供命令并允许添加自定义管理命令 启动Flask # 导入Flask类创建Flask应用对象 from flask import Flaskapp Flask(__name__)# 为Flask应用添加路由 app.route(/) def index(): # 与路由绑定的视图函数视图函数名尽可能保持唯一return Hello worldif __name__ __main__:app.run() # 启动Flask应用Flask Response “Hello world” 可直接返回字符串 render_template(“HTML文件”) redirect(“/home”) 重定向到指定路由ResponseHeaders中加入了一个 Locationhttp://url send_file(“文件路径”) 返回文件 打开并识别文件内容自动识别文件类型在ResponseHeaders中加入Content-Type:文件类型这些文件类型是可以被客户端识别的对于不能识别的文件类型作下载处理。 如exe文件x-ms x表示二进制文件 ms表示微软 jsonify(“字符串或者数据类型”) 返回数据类型为Content-Type:application/json Flask Request request.form获取FormData中的数据可用to_dict()方法转为字典数据类型 request.method获取请求方式 request.args获取url中的数据 request.files获取上传的文件 my_file request.files.get(myfile) my_file.save(文件保存路径)request.data获取json数据 获取Content-Type:application/json时提交的数据 request.data获取原始请求体中的数据 b Content-Type无法被识别或不包含Form字眼 request.headers request.cookies request.path request.host request.host_url request.url请求地址 request.values接受所有(GET,POST)请求中的数据包含了URL和FormData request.url_charsetURL编码格式 request.url_root请求地址完整的请求地址 host request.url_rule请求路由地址 /index 用户登录demo Python from flask import Flask from flask import render_template from flask import requestapp Flask(__name__)app.route(/login, methods[GET, POST]) def login():if request.method GET:return render_template(login.html)elif request.method POST:username request.form.get(username)password request.form.get(password)print(username, password)if username jack and password 123456:return {msg: 登陆成功} if __name__ __main__:app.run(host0.0.0.0, debugTrue)Html !DOCTYPE html html langen headmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title用户登录/title /head bodybodyform action/login methodpostspan账号 input typetext nameusername/spanbrspan密码 input typetext namepassword/spanbrspaninput typesubmit value登录/span/form/body /body /htmlFlask Session Session服务端的键值对 Cookie客户端的键值对 交由客户端保管机制 开启session[token] “asdfihasdfjhdsfiohoi” {”token: “asdfihasdfjhdsfiohoi”}序列化字典 字符串根据secret_key密钥加密字符串 接受反序列化session 从cookie中获取key为session的值 “eyJ0b2tlbiI6ImFzZGloaWFzZGhhc2RpdWhhaXNkaCJ9.Y3Oe1w.yWmRzkZcJXKM1IeVYfF97mCgpz4”通过secret_key解密 session反序列化成字典 from flask import Flask from flask import render_template from flask import requestapp Flask(__name__) app.secret_key $^%%%#$%^* # 设置密钥如果不设置密钥使用session会报错app.route(/login, methods[GET, POST]) def login():if request.method GET:return render_template(login.html)elif request.method POST:username request.form.get(username)password request.form.get(password)print(username, password)if username jack and password 123456:session[token] asdihiasdhasdiuhaisdhreturn redirect(/)app.route(/) def index():token session.get(token)return Hello worldif __name__ __main__:app.run(host0.0.0.0, debugTrue)Flask Jinja2 {{ }} 引用变量数据 执行函数 {% %} 逻辑代码 for循环 {% for item in items %}# 逻辑代码 {% endfor %}if 判断 {% if 判断条件 %}# 逻辑代码 {% else %}# 逻辑代码 {% endif %}from flask import Flask from flask import render_templateapp Flask(__name__)def fun():return 水花兄弟!app.route(/name) def user():users [{name: 库里, age: 34, gender: 男},{name: 汤普森, age: 32, gender: 男},{name: 格林, age: 31, gender: 男}]return render_template(user.html, usersusers, funfun)if __name__ __main__:app.run(host0.0.0.0, debugTrue)!DOCTYPE html html langen headmeta charsetUTF-8titleTitle/title /head bodytabletrtdname/tdtdage/tdtdgender/td/tr{% for user in users %}trtd{{ user.name }}/tdtd{% if user.age 32 %}{{ fun() }}{% else %}{{ user.age }}{% endif %}/tdtd{{ user.gender }}/td/tr{% endfor %}/table /body /html注意 变量为dict类型时可用key.value、dict[key]或者dict.get(key)获取值函数可作为变量传入后调用 Flask 路由参数 route()中的参数 endpoint不能重复对应视图函数 默认是视图函数名 视图函数与路由对应关系 url_for 反向创建url methods 允许亲求的方式 [GET, POST, DELETE, PUT] redirect_to 永久重定向 没有进入视图直接跳转 strict_slashes 是否严格要求路由匹配规则 为True时“/url/“是不被允许的只允许”/url” 为False时/url/“和”/url都可以 default{nid: 123} 默认参数视图函数中func(nid)一定要接受传参 动态路由参数 接收多个参数 app.route(/pages/int:page_int:row) def pages(page, row):print(page, row)return 200 okFlask实例化配置 template_folder模板存放路径默认为templatesstatic_folder静态文件存放路径默认值为staticstatic_url_path静态文件访问路径默认值为/staticstatic_host静态文件访问服务HOST 指向到另一台服务器 from flask import Flaskapp Flask(__name__,template_foldertemplates,static_folderstatic,static_url_path/static,static_hostxxxxx )Flask对象Config配置 DEBUG模式开启编辑时代码重启Log打印级别最低错误信息透传 app.config[DEBUG] TrueTESTING模式无限接近生产环境代码编辑不会重启Log级别较高错误信息不再透传 app.config[TESTING] FalseSESSION_COOKIE_NAME浏览器中session的名称第一个字符不能是空格 app.config[SESSION_COOKIE_NAME] sessionFlask Config快速配置 class DebugConfig:DEBUG TrueSECRET_KEY asdhugoiasd^%$$#$%#^%7from settings import DebugConfigapp Flask(__name__) # app.secret_key $^%%%#$%^* app.config.from_object(DebugConfig)Flask 蓝图 BluePrint 蓝图作用功能隔离路由隔离 新建app01文件夹下新增views.py文件、templates、static文件夹等 url_prefix表示URL前缀用于隔离相同URL user表示蓝图名称不能重复保证在app中是唯一的 template_folder默认是最外层项目templates如需设置内部文件夹则template_folderapp01/templates # views.py # 蓝图 from flask import Blueprint# BluePrint 当作一个不能够run的Flask user Blueprint(user, __name__, url_prefix/user)user.route(/login) def login():return I am userBP在app.py中注册蓝图 from flask import Flaskapp Flask(__name__)from app01.views import user # 注册蓝图 app.register_blueprint(user)if __name__ __main__:app.run()浏览器中访问app01的login视图http://127.0.0.1:5000/user/login Flask特殊装饰器 app.before_request 请求进入视图函数之前 app.after_request请求结束返回响应时 正常before_request1 before_request2 视图函数 after_request2 after_request1 异常before_request1 after_request2 after_request1 app.errorhandler(4xx or 5xx)重定义错误信息 app.errorhandler(404) def error(error_message):print(error_message)# return f你访问的{}不存在.format(request.path) # 自定义信息# return redirect(www.baidu.com) # 重定向return send_file(文件路径) # 返回图片或者其他文件Flask CBV from flask import Flaskapp Flask(__name__)app.route(/) # FBV def index():return asbdjfrom flask import viewsclass Index(views.MethodView):def get(self):return GET 200 OKdef post(self):return POST 201 OKdef put(self):return PUT 200 OKdef delete(self):return DELETE 200 OK# 注册路由 app.add_url_rule(/user, view_funcIndex.as_view(nameuser))if __name__ __main__:app.run(debugTrue)监听 端口 0.0.0.0监听ip地址 端口 - 监听应用程序 包到应用程序的过程 IOS 5层中的最高层 ——————- 应用 服务器接收到数据浏览器-9528 bHTTP 1.1 /GET\r\n 192.168.14.25:9527 网卡 操作系统 操作系统 解包 - 端口9527 - 收到 bHTTP 1.1 /GET\r\n Flask - WSGI 把数据转换成 environ对象请求原始数据对象几乎接近于request对象 Flask 接收到 WSGI 转换的environ对象 request_class Flask Request 样式 Flask request对象如request.form Flask-Session第三方组件 交由客户端保管机制 - 安全性相对较差 Cookie原生Session优势是不占用服务器空间Flask-Session - DjangoSession相对一样的数据redis在内网中使用不要放在公网 # 蓝图 from flask import Blueprint from flask import session# BluePrint 当作一个不能够run的Flask user Blueprint(user, __name__, url_prefix/user)user.route(/login) def login():session[user] asdugaiushduyhreturn I am userBPuser.route() def index():print(session[user])return sessionfrom flask import Flask from flask_session import Session from redis import Redisfrom app01.views import userapp Flask(__name__) app.secret_key asdhiuh989 app.config[SESSION_TYPE] redis app.config[SESSION_REDIS] Redis(host106.15.**.**, port6379, password******) # 配置之后 Session(app) # 蓝图之前 app.register_blueprint(user)if __name__ __main__:app.run()Flask请求上下文 该部分主要是阅读源码 线程安全 极快解决阻塞问题保证公共对象的安全性缺点是非常耗费内存空间换时间 import time from copy import deepcopy from threading import Thread, get_identclass Foo:passlocal_dict {}f Foo() f.num 0def add_(i):local_dict[get_ident()] deepcopy(f)local_dict[get_ident()].num itime.sleep(1)print(local_dict[get_ident()].num)for i in range(20):task Thread(targetadd_, args(i,))task.start()import time from threading import Thread, localclass Foo(local):passf Foo()f.num 0def add_(i):f.num itime.sleep(1)print(f.num)for i in range(20):task Thread(targetadd_, args(i,))task.start()相对使用线程ID保存数据的方式使用local占用资源更少 偏函数将原函数和原函数接收的参数一并返回新函数在执行新函数时将参数传入原函数中一并执行。 from functools import partialdef abfunc(a, b, c):return a b cnew_fum partial(abfunc, c88)print(new_fum(6, 7))OOP 面向对象 熟悉掌握相关魔法方法以及重写如__setitem__、__getitem__等 Web socket
http://www.w-s-a.com/news/177113/

相关文章:

  • 腾讯企业网站建设网络推广比较经典和常用的方法有
  • 四川成都网站网页设计上海外贸网站制作公司
  • wordpress模板首页图片锦州网站做优化
  • 哔哩哔哩网站建设分析有哪些做网站好的公司
  • 福建建设执业中心网站沧州网络推广外包公司
  • 做网站怎么改关键词营销网站建设818gx
  • 广撒网网站怎么进行网络营销
  • 中职计算机网站建设教学计划电商网站如何避免客户信息泄露
  • 惠州微网站建设外贸进出口代理公司
  • 网站建设最常见的问题建设银行网站机构
  • 网站集群建设相关的招标南通seo网站建设费用
  • 网络培训的网站建设能够做二维码网站
  • 网站类游戏网站开发wordpress 文章首标点
  • 徐州网站建设熊掌号免费推广网站入口2020
  • 网站建设有前途长春高铁站
  • 做网站网课阿里云域名查询系统
  • saas建站平台有哪些简述网站建设基本流程答案
  • 个人怎么做网站网站浏览思路
  • 网站建设里的知识长沙网络营销公司
  • 网站建设与维护大作业pc网站转换成微网站
  • php网站开发经典教材东莞网站开发
  • 教育培训手机网站模板下载跨境电商培训哪家最好
  • 网站开发淄博网站被降权会发生什么影响吗
  • 网站开发常用的语言东城手机网站制作
  • 微小店网站建设平台手机优化加速有什么用
  • 沈阳酒店企业网站制作公司竞价网站怎么做seo
  • 中山企业网站多少钱学网站建设的好处
  • 做官网网站哪家公司好jianux wordpress
  • 插件素材网站新站seo优化快速上排名
  • 网站注销主体填写原因asp响应式h5网站源码下载