自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 20200728《Flask进阶》——虚拟数据

虚拟数据:问题:项目搭建时需要用到虚拟数据来辅助工具: faker代码: from faker import Faker fake = Faker() category = Category(name=fake.word()) # 除了word以外,还有fake.sentence、fake.text等`

2020-07-28 00:10:48 148

原创 20200728《Flask进阶》——数据库中密码设置

数据库中密码存储:问题:如何在数据库中设置密码思路: 用hash保存密码,用werkzeng.security中的generate_password_hash和check_password_hash生成和验证密码工具: werkzeng代码: def set_password(self, password): self.password_hash = generate_password_hash(password) def validate_password(.

2020-07-28 00:09:22 297

原创 20200728《Flask进阶》——邻接列表关系

邻接列表关系:问题:在一个模型内建立层级关系思路:首先添加一个外键指向自身,关系两侧的关系属性都是模型本身,通过将remote_side参数设为id地段,来把所在字段定义为关系远侧工具: SQLALCHEMY代码: replied_id = db.Column(db.Integer, db.ForeignKey('comment.id')) replies = db.relationship('Comment', back_populates='replied', cascade=.

2020-07-28 00:06:24 231

原创 20200727《Flask进阶》——模块化程序(蓝本)

模块化程序问题: 对于大型项目,需要将各个功能模块化,有利于组织和改进思路: 通过蓝本来模块化程序实例,蓝本可以像程序实例一样,可以在蓝本上注册路由、注册错误函数、注册上下文处理函数等等工具: Blueprint代码:# 创建蓝本from flask import Blueprintauth_bp = Blueprint('auth', __name__) # 第一个参数是蓝本名称,第二个参数是包或模块名称,可以使用name变量# 装配蓝本(可装配视图函数、错误处理函数、请求处.

2020-07-28 00:04:21 106

原创 20200727《Flask进阶》——模块化程序(蓝本)

模块化程序问题: 对于大型项目,需要将各个功能模块化,有利于组织和改进思路: 通过蓝本来模块化程序实例,蓝本可以像程序实例一样,可以在蓝本上注册路由、注册错误函数、注册上下文处理函数等等工具: Blueprint代码:# 创建蓝本from flask import Blueprintauth_bp = Blueprint('auth', __name__) # 第一个参数是蓝本名称,第二个参数是包或模块名称,可以使用name变量# 装配蓝本(可装配视图函数、错误处理函数、请求处.

2020-07-28 00:01:47 107

原创 20200722《Flask进阶》——电子邮件(Flask-Mail)

用Flask-Mail发送电子邮件从Flask-Mail导入Mail配置app初始化mail配置message发送邮件代码如下:···import osfrom flask import Flaskfrom flask_mail import Mail, Messageapp = Flask(name)app.config.update(MAIL_SERVER=‘smtp.qq.com’, # 服务器MAIL_PORT=465,MAIL_USR_SSL=True,MAI

2020-07-22 22:50:22 173

原创 20200721《Flask进阶》——工厂函数

工厂函数是被命名为create_app或者make_app的函数,内部完成加载配置,创建app、加载配置等功能,最后输出app,代码如下:def create_app(config_name=None): ''' 这是一个工厂函数,会根据传入参数来创建响应app, ''' if config_name is None: config_name = os.getenv('FLASK_CONFIG', 'development') # 创建app、加载

2020-07-21 17:08:34 244

原创 20200721《Flask进阶》——用类组织配置

在实际项目中,往往需要多种配置组合,一种方法是在单个配置文件中用python类来组织不同类别的配置:引入os定位根目录建立4个配置类:BaseConfig、DevelopmentConfig、TestingConfig和ProductionConfig定义一个方便后面查找的字典代码如下:import osbasedir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) # 定位当前文件所在根目录class

2020-07-21 12:06:00 135

转载 os.path.dirname(__file__)方法详解

该测试脚本所在的位置:D:\第1层\第2层\第3层\第4层\第5层\test11.py1. import os 2. #该文件所在位置:D:\第1层\第2层\第3层\第4层\第5层\test11.py 3. path1 = os.path.dirname(__file__) 4. print(path1)#获取当前运行脚本的绝对路径 5. path2 = os.path.dirname(os.path.dirname(__file__)) # 6. print(path

2020-07-21 08:55:42 10810

原创 20200720《Flask进阶》——蓝本

为什么需要蓝本:使用蓝本组织程序结构,将程序模块化什么是蓝本:蓝本是蓝本实例及注册在蓝本实例上的操作集合,蓝本本身不能发挥作用,它需要注册到程序上实例化蓝本:实例化蓝本(Blueprint),第一个参数是蓝本名,第二个参数是模块/包名称注册蓝本:app.register_blueprint(),必须传入的参数是蓝本对象,可选参数可以控制蓝本的行为,比如添加URL前缀等端点:url和视图函数并不是直接映射呢,中间有个端点(endpoint),端点名称默认与视图函数名称一样蓝本的路由端点:.

2020-07-20 22:37:16 134

原创 20200719《Flask进阶》——表单(一)

表单WTForms:是使用python编写的表单库Flask-WTF集成了WTForms,将表单数据解析、CSRF保护、文件长传等功能与Flask集成CSRF保护:Flask-WTF默认为每个表单启用CSRF保护,自动生成和验证CSRF令牌,默认使用程序密钥对CSRF令牌进行签名定义WTForm表单类:表单——python类(继承Form基类,由WTForms导入)字段(Field,输入框、按钮等)——实例化字段类字段类属性的名称作为对应HTML元素的name属性及id属性值验证器:实例

2020-07-19 21:37:42 81

原创 20200718《Flask进阶》——模板

模板引擎:Jinja2渲染模板函数:render_template(),参数为HTML文件(文件路径是相对templates文件夹的)和传入参数在模板中自定义变量:set标签(也可以将一部分模板数据定义为变量Flask的内置变量:config、request、session、g设置模板全局变量(用于多个模板都需要使用同一变量的情况):装饰器——app.context_processor,注册一个模板上下文处理函数,返回包含变量键值对的字典Jinja2常用的内置全局函数:range、lipsum、.

2020-07-18 23:28:50 91

原创 20200717《Flask进阶》——Flask与HTTP(一)

第二章 Flask与HTTP协议2.1 请求响应循环- 客户端 —— HTTP ——web服务器 —— WSGI —— Flask —— 数据库2.2 HTTP请求- URL组成,以http://helloflask.com/hello?name=lieven为例: - http:// 协议字符串,指定要使用的协议 - helloflask.com 服务器的地址(域名) - /hello?name=lieven 要获取的资源路径(path),类似UNIX的文

2020-07-17 22:25:24 240

原创 git/github命令指南

$ git config --global user.name “Your Name”$ git config --global user.email “email@example.com”安装后输入名字和邮箱,–global参数表示这台计算机上的每个GIT仓库都使用这个配置

2020-05-28 22:49:30 76

原创 flask-url_for的使用

url_for()函数接受2个及以上参数,接受函数名作为第一个参数,之后接受对应url命名规则的其他参数,超出的参数,会添加到url的后面作为查询参数@app.route('/list2/')def list2(): return url_for('list3', id=2, pwd=110, _external=True) # 参数_external=True让其返回一个完整的url@app.route('/list3/<id>')def list3(id): r

2020-05-15 12:05:10 97

原创 flask-两种传参方式

第一种:/路径/参数,就是将参数嵌入到路径中第二种:/路径?参数名1=参数值1&参数名2=参数值2…# 用id传参@app.route('/list/<int:id>/')def list(id): # 1. 获取id号 # 2. 拿到id号,去操作数据库,得到数据库返回的数据 return '文章ID为:%s' % id# 用?传参@app.route('/list1', methods=['GET', 'POST'])def list1(.

2020-05-15 11:40:54 1418

原创 Python编程-修改flask项目中的host

用途:通过修改host,能让局域网里的其他主机访问

2020-05-14 20:26:27 709

原创 python编程-用flask写出第一个程序

from flask import Flask # 从flask包中导入Flask类app = Flask(__name__)# 实例化一个app对象@app.route('/') # 把括号中的参与被装饰的函数链接到一起def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run() # 默认是5000端口执行结果:FLASK_APP = app.pyFLASK_ENV = d

2020-05-14 16:46:03 168

原创 web服务器和应用服务器区别

web服务器:负责处理http请求,处理的是静态资源(html、css、js、image等),不能处理逻辑请求,只是请求啥就返回啥应用服务器(Python对应的应用服务器是uwsgi)content-type和Mime-type

2020-05-13 08:52:55 103

原创 全面认识——URL

URL——互联网三大基石之一,全称Uniform Resource locatorURL的组成:scheme://host:port/path/?query-string=xxx#anchor即:模式://主机:端口号/文件名或项目名/?查询参数#锚点scheme:host:主机名,域名,比如www.baidu.comport:端口号path:查找路径query-string:请求参数anchor:锚点,后端代码不用管,前端用来做页面定位的(当页面内容多是,用于在页面中跳转)注意:ur.

2020-05-12 22:44:05 125

原创 Python开发的虚拟环境virtualenv和virtualenvwrapper

虚拟环境主要是在企业中做开发的时候用虚拟环境的作用和原理:通过pip install的方式来安装,是把安装包安装到系统级别的安装环境中,这样会带来问题,如果要在一个电脑上同时维护基于不同版本环境上的项目就不兼容了此时,就需要虚拟环境,这样就可以在一个电脑上有两个或多个不同版本的软件了如何进入虚拟环境:在命令行窗口,进去虚拟环境文件夹中的scripts中,输入activate激活(激活状态时,路径前出现虚拟环境文件夹名称)如何退出虚拟环境:deactivate但是virtualenv管理比较麻

2020-05-12 22:12:11 93

原创 python创建第一个网页-flask、request、render_template、jinja2用法

from flask import Flask # 用Flask实例化出对象from flask import request # 用request.form可提取表单中的内容from flask import render_template #用render_template链接html文件,并且支持其中的jinja2模板

2020-05-08 17:53:12 332

原创 python-装饰器是什么

装饰器(decorator),顾名思义,就是用来装饰函数的,包括给之前的定义的函数增加功能等函数对象有个name属性,可以拿到函数的名字# 写一个给原函数添加日志的Decoratordef log(func): def wrapper(*args, **kwds): # 定义执行装饰器的函数,*args, **kwds表示可以输入任意参数 print('即将执行函数%s:' % fun...

2020-05-08 15:37:45 69

原创 web编程——何为CS、BS模式

早起的最广泛的模式是软件运行在桌面上,数据库运行在服务器端,这就是CS模式(Client/Server),即客户端/服务器模式。这种模式的缺点就是客户端分布在各个电脑上,升级很麻烦之后就有了BS模式(Browser/Server),即浏览器/服务器模式。这种模式即客户端只有浏览器,任务的执行和数据存储都在服务器端,如果要升级也不需要改变浏览器端...

2020-05-01 22:19:58 1313

原创 python网络编程-socket使用

socket 编程socket是应用层和传输层之间的桥梁socket本质是编程接口(API),socket是最TCP/IP协议的封装'''import sockets = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 参数含义:AF_INET表示IPV4协议,SOCK_STREAM代表TCP协议,DGRAM代表UDP协议s.bind...

2020-04-29 14:09:02 104

原创 python网络编程-IP地址、子网掩码、IP/TCP协议的意思

IP地址,在网络中唯一标识一台计算机子网掩码:区分IP地址中的网络号和主机号,跟IP地址成对出现,C类IP地址对应的子网掩码就是:255.255.255.0B类IP地址对应的子网掩码就是:255.255.0.0端口号:标记和区分进程,0-65535,知名端口号:0-1023协议,最初各个计算机厂商有自己的网络传输协议,并且互不兼容,之后建立了互联网协议簇TCP/IP协议就包含了进程间网...

2020-04-29 14:05:47 201

原创 python并发编程-task 的应用

import asyncioasync def compute(x,y): print(f'{x}+{y}=......') await asyncio.sleep(1) return x + yasync def pri(x,y): n = await compute(x,y) print(f'{x}+{y}={n}')if __name__ ...

2020-04-29 08:49:43 199

原创 python并发编程-协程的用法-asyncio的用法

import asyncio# python3.5以上版本写法# 创建协程async def func1(): for i in range(5): print('python是世界上最好的编程语言!!!') await asyncio.sleep(1)async def func2(): for i in range(5): ...

2020-04-28 17:29:30 107

原创 python并发编程-协程的特点

#线程是CPU控制的,协程是程序自己控制的‘’’协程的优点:轻量级,因为属于程序级别的操作,CPU根本不知道无需原子操作的锁定及同步的开销方便切换控制流,简化编程模型单线程内就能实现并发的效果,最大限度的利用CPU,且可扩展性高,成本低协程的缺点:无法利用多核资源,所以要结合进程来用遇到阻塞时会阻塞掉整个程序‘’’...

2020-04-28 14:01:28 121

原创 python并发编程-进程池的应用

进程池的由来:频繁的创建进程和回收进程会消耗大量内存pool.apply 创建进程,执行后需要用close关闭,然后用join回收pool.map 批量创建进程用with Pool(n) as pool: 这种格式就自动关闭回收了...

2020-04-28 12:57:03 315

原创 python并发编程-如何用类方法来创建进程,及如何验证

# 引入进程模块from multiprocessing import Processfrom time import sleepimport os# 创建类class MyProcess(Process): def __init__(self,name): Process.__init__(self) self.name = name ...

2020-04-28 08:45:16 147

原创 python并发编程-用函数/方法来创建进程

# 引入进程模块from multiprocessing import Processfrom time import sleepimport os# 创建类class MyProcess(Process): def __init__(self,name): Process.__init__(self) self.name = name ...

2020-04-28 08:44:00 81

原创 并发编程14-生产者与消费者模式,举例

from threading import Threadfrom queue import Queuefrom time import sleepdef producer(): num = 1 while True: if mq.qsize() < 10: # 控制仓库里商品的数量,活着通过下面的Queue(maxsize=10)来控制也是一样的 ...

2020-04-27 22:46:42 88

原创 并发编程——队列,Queue、LifoQueue和PriorityQueue 的区别

# 特点:先进先出,如果取光了,就等待# get()有两个参数,block默认为True表示等待,False表示不等待,同get_nowait()队列是空时不等待;# timeout表示等待事件# 除了Queue外,还有LifoQueue后入先出队列、PriorityQueue优先级队列...

2020-04-27 17:42:21 362

原创 并发编程——事件 event的应用

event的用法:event.is_set() 判断事件目前是True或Falseevent.set() 将事件设置程Trueevent.clear 将事件设置程Falseevent.wait 将事件挂起等待

2020-04-27 16:22:28 119

原创 并发编程—信号量参数 BoundedSemaphore

BoundedSemaphore信号量参数用途:控制线程数量代码示例:from threading import Threadfrom threading import BoundedSemaphorefrom time import sleepdef an_jian(num): semaphore.acquire() print(f"第{num}人安检完成。") ...

2020-04-27 11:43:41 170

原创 python并发编程—递归锁/逻辑锁的使用 Rlock

from threading import RLock,Lock# Rlock 逻辑锁的使用def func1(): lock.acquire() print('func1拿到锁') func2() lock.release() print('func1释放锁')def func2(): lock.acquire() print('...

2020-04-27 08:24:29 298

原创 并发编程—线程中的锁如何使用

from threading import Threadfrom threading import Lockdef func(name): # 获取锁 lock.acquire() global count for i in range(1000000): count += 1 # 释放锁 lock.release()if ...

2020-04-27 07:12:42 104

原创 并发编程06—全局锁,python已经有全局锁,为什么还要加锁lock

python默认有个全局锁,意思就是默认会开启锁,但是这个锁是有容量限制的,超出容量就取消,执行其他线程,所以在线程程消耗时间少的时候是安全的,线程消耗时间长的时候就不安全了,需要手动上锁...

2020-04-27 07:11:43 309

原创 并发编程——守护线程

# 守护线程的意思: 主进程结束后,不在执行未结束的线程了from threading import Threadfrom time import sleepclass MyThread(Thread): def __init__(self,name): Thread.__init__(self) self.name = name def ...

2020-04-26 17:15:07 77

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除