人生苦短,我用python,吃油泼面。
python
python 插入mysql数据库字符串中含有单引号或双引号报错
form表单提交数据库中存在问题的处理
通过pyinstaller 将python文件打包成exe文件
判断是pc还是手机登录web服务器
MyQR模块生成普通二维码、艺术二维码,动态二维码
flask 路由传递多个参数的写法
去除python exe 文件的cmd黑窗口
NameError: name ‘requests‘ is not defined和NameError: name ‘request‘ is not defined
windows server 上部署python flask 项目
Python项目如何生成requirements.txt文件
swiper插件的使用
pycharm中虚拟环境中安装库文件(解决很多库安装了,但import不了的问题)
python 插入mysql数据库字符串中含有单引号或双引号报错
解决方法: 1、旧的方式,使用string.replace(),将双引号全部替换成单引号,但这种方法就会改变原本传入的多层嵌套的结构,发起请求的时候,就会存在语法错误; 2、使用pymysql.converts.escape_string()方法,就可以解决这个报错,并可将包含单双引号的字段插入到数据库; from pymysql.converters import escape_string paras = escape_string(paras)
form表单提交数据库中存在问题的处理
#1.获取文件列表 #2.获取文件扩展名,并查询扩展名是否在允许上传的列表中 #3.将中文文件名转换为拼音,解决上传后中文文件名为空出错的问题 #4.通过secure_filename,将文件名格式转换为安全格式 #5.解决文本插入数据库时单引号插入数据库出错问题 ##以下为引入的库 import os from pypinyin import pinyin,lazy_pinyin import flask import pymysql import time import re import cryptography # 远程访问mysql数据库时,因为权限加密问题需要这个包 from flask import request, render_template,flash from werkzeug.utils import secure_filename ##以下为设置的参数 # 实例化类flask app = flask.Flask(__name__) #secret_key 在session时会使用,如flsh信息 app.secret_key = "steadfastness123456" #文件上传要求参数 app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024#文件大小 #允许上传文件的扩展名列表 app.config['UPLOAD_EXTENSIONS'] = ['.jpg', '.png', '.gif','.docx','.doc','.html','.python','.css','.js','.json','.xlsx'] app.config['UPLOAD_PATH'] = 'static\\uploads'#上传路径 ##以下为路由函数 @app.route('/upload', methods=['POST', 'GET']) def upload(): if request.method=="POST": # 处理form表单,获取数据 form_data = request.form pclass = form_data.get('pclass') title = form_data.get('title') content = form_data.get('content') # request.files.getlist('file')为获取文件列表,request.files['file']为获取单个文件名 filelist=request.files.getlist('file') if pclass and title and content: print("pclass", pclass) print("title", title) print("content", content) print("filelist", filelist) print(type(filelist)) savepath='' for uploaded_file in filelist: if uploaded_file.filename != '': file_ext = os.path.splitext(uploaded_file.filename)[1]#获取文件扩展名 if file_ext not in app.config['UPLOAD_EXTENSIONS']:#判断扩展名是否在允许列表中 flash("{}文件扩展名不允许上传服务器".format(file_ext)) return render_template('upload.html') else: filename1 = "".join(lazy_pinyin(uploaded_file.filename)) # 将中文文件名转换为拼音,解决上传后中文文件名为空出错的问题 filename2 = secure_filename(filename1)#文件名格式转换为安全格式 path=os.path.join(app.config['UPLOAD_PATH'], filename2) uploaded_file.save(path) savepath=savepath+path+";" #解决单引号插入数据库出错问题 from pymysql.converters import escape_string content = escape_string(content) print(savepath) #将数据写入数据库 # 链接数据库 db = pymysql.Connect(host=HOST, port=PORT, database=DATABASE, user=USERNAME, password=PASSWORD,charset='utf8') # 获取游标 cur = db.cursor() # sql语句 sql1 = r"insert into study values(null,'{}','{}','','{}','{}','1');".format(pclass,title,savepath,content) # 执行sql语句 cur.execute(sql1) db.commit() flash('数据提交成功') return render_template('upload.html') else: flash('数据不能为空,请重新提交') return render_template('upload.html') else: return render_template('upload.html')
通过pyinstaller 将python文件打包成exe文件
1、安装pyinstaller: pip install pyinstaller 2、将123.py文件打包成exe文件: pyinstaller -F 123.py 3、执行完毕后会生成dist文件夹,exe文件在dist文件夹中。 注意点: 对于需要生成exe文件的py文件,最好重新建一个工程环境,这样venu文件夹中的库文件会只有最需要的,生成的exe文件会相对小一些,不会把一些不是该py文件使用的库文件也打包在内,导致exe文件会非常大。
判断是pc还是手机登录web服务器
//判断函数 def judge_pc_or_mobile(ua): """ 判断访问来源是pc端还是手机端 :param ua: 访问来源头信息中的User-Agent字段内容 :return: """ factor = ua is_mobile = False _long_matches = r'googlebot-mobile|android|avantgo|blackberry|blazer|elaine|hiptop|ip(hone|od)|kindle|midp|mmp' \ r'|mobile|o2|opera mini|palm( os)?|pda|plucker|pocket|psp|smartphone|symbian|treo|up\.(browser|link)' \ r'|vodafone|wap|windows ce; (iemobile|ppc)|xiino|maemo|fennec' _long_matches = re.compile(_long_matches, re.IGNORECASE) _short_matches = r'1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)' \ r'|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)' \ r'|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw' \ r'|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8' \ r'|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit' \ r'|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)' \ r'|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji' \ r'|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx' \ r'|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi' \ r'|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)' \ r'|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg' \ r'|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21' \ r'|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-' \ r'|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it' \ r'|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)' \ r'|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)' \ r'|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit' \ r'|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-' _short_matches = re.compile(_short_matches, re.IGNORECASE) if _long_matches.search(factor) != None: is_mobile = True user_agent = factor[0:4] if _short_matches.search(user_agent) != None: is_mobile = True return is_mobile //路由函数调用 @app.route('/',methods=['POST','GET']) def index(): head = request.headers print("User-Agent", head['User-Agent']) ua = head['User-Agent'] is_mobile = judge_pc_or_mobile(ua) if is_mobile: print("is mobile") return render_template('index1.html') else: print("is pc")
MyQR模块生成普通二维码、艺术二维码,动态二维码
#安装myqr模块 pip install myqr #生成普通二维码 #Python MyQR模块支持自定义二维码,可以生成普通二维码、艺术二维码,动态二维码。 #pip install myqr ##制作普通二维码 from MyQR import myqr # ver,level,qr_name=myqr.run(words='https://www.xpkj.online') # # print(ver,level,qr_name) ##制作艺术二维码,此处colorized=Flase 为黑白色 # ver,level,qr_name=myqr.run(words='https://www.xpkj.online',picture='hongxing.jpg',colorized=True) # # print(ver,level,qr_name) ##制作动态二维码,picture后面改成123.gif文件,则可以生成动态视频二维码 ver,level,qr_name=myqr.run(words='https://www.xpkj.online',picture='123.gif',colorized=True) print(ver,level,qr_name)
flask 路由传递多个参数的写法
#购物车增加 @app.route('/koko/add_gouwuche/<string:shangpinid>/<string:guige>/<string:yanse>', methods=['POST', 'GET']) def koko_addgouwuche(shangpinid,guige,yanse): print("我在add_gouwuche") print(shangpinid) print(guige) print(yanse)
去除python exe 文件的cmd黑窗口
将原来的***.py 原文件的后缀名.py 改成 .pyw,然后再通过pyinstaller -F ***.pyw 生成新的 ***.exe 文件就没有cmd黑窗口了。
NameError: name ‘requests‘ is not defined和NameError: name ‘request‘ is not defined
NameError: name ‘requests’ is not defined是缺少包import requests; NameError: name ‘request’ is not defined是缺少包from flask import request。 这俩长太像了,但作用不一样。“requests”是用来获取GET,POST请求等,如: r = requests.get('https://api.github.com/user', auth=('user', 'pass')) “request”是用来获取表单数据如: request.form.get("value")
windows server 上部署python flask 项目
python flask框架服务器程序写完了,要正式部署到Windows server 上,falsk自带的wsgi是用于开发环境的,不合适用于生产环境,但gunicorn 不支持在window,只能用tornodo.具体如下: 新建 server.py 文件,需要增加以下代码, from tornado.httpserver import HTTPServer from tornado.wsgi import WSGIContainer from app import app #这里的第一个app是自己项目的入口主程序,第二个app是程序中的app实例 from tornado.ioloop import IOLoop s=HTTPServer(WSGIContainer(app)) s.listen(5000)#5000为端口地址,可以自己配置 IOLoop.current().start() 完成后,后续只需要运行server.py文件就可以了,访问地址仍然是 localhost:5000。服务器上可以不用安装pycharm,直接在文件当前目录下用python server.py启动运行即可。
Python项目如何生成requirements.txt文件
Pyhon项目中,一般都会有一个 requirements.txt 文件,这个文件主要是用于记录当前项目下的所有依赖包及其精确的版本号,以方便在一个新环境下更快的进行部署。 使用 pip freeze 生成: 一般情况,我们可以直接使用Python下的 pip 包管理工具,来生成 requirements.txt 文件,命令如下: pip freeze > D:\pycharm\requirements.txt 其中,D:\pycharm\requirements.txt 为生成的 requirements.txt 文件的具体路径。通过这个 pip freeze 方式生成时,会把整个Python环境下的所有包都列出生成,比较适用于Python项目为虚拟环境的情况。 使用 pipreqs 生成: 我们还可以通过第三方库 pipreqs 来生成 requirements.txt 文件,这个方式有一个好处,那就是它可以只生成我们当前Python项目中所用到的依赖包及其版本号,而不是像 pip freeze 方式一样把所有包全部列出生成。 安装pipreqs 可以直接通过 pip 来安装 pipreqs,安装命令: pip install pipreqs 安装后通过 pip show pipreqs 查看,我这里安装的版本是 0.4.10。 D:\>pip3 show pipreqs Name: pipreqs Version: 0.4.10 Summary: Pip requirements.txt generator based on imports in project Home-page: https://github.com/bndr/pipreqs Author: Vadim Kravcenko Author-email: vadim.kravcenko@gmail.com License: Apache License Location: d:\python\installation\lib\site-packages Requires: yarg, docopt Required-by: 使用pipreqs: pipreqs 使用起来也很容易,命令使用方式为:pipreqs 当前Python项目的根目录。 在执行时,可能会出现上面提示编码方式不对的情况,为解决这个问题,我们可以在执行命令中指定编码方式为 utf-8 ,如下: D:\>pipreqs D:\pycharm\Code\flaskDemo --encoding=utf8 INFO: Successfully saved requirements file in D:\pycharm\Code\flaskDemo\requirements.txt 如果我们Python项目的根目录中已存在 requirements.txt ,那么使用上面命令就会出现警告: D:\>pipreqs D:\pycharm\Code\flaskDemo --encoding=utf-8 WARNING: Requirements.txt already exists, use --force to overwrite it 警告信息中的提示,告诉我们可以使用参数 --force 来覆盖重新生成 requirements.txt ,如下: pipreqs D:\pycharm\Code\flaskDemo --encoding=utf-8 --force 执行requirement.txt: 生成 requirement.txt 后,我们查看其发现是这样的格式: PyMySQL==0.9.3 Flask==1.0.3 redis==3.4.1 那么,对于 requirement.txt 中列出的第三方库,应该如何去执行并安装呢?安装方式很简单,我们通过 pip 工具,执行命令:pip install -r requirements.txt ,该命令会把 requirements.txt 文件中列出的库依次进行安装,最后等待安装完成即可。
swiper插件的使用
1、上swiper.com.cn网站; 2、点击下载相应的swiper完整包; 3、下载完成后,在package目录下,找到js和css子目录,复制到自己的项目目录下; 4、在自己的html中引入js和css文件: <link ref=stylesheet href="./css/swiper.min.css"> ......... <script src="./js/swiper.min.js"></script> 5、在swiper.com.cn中找到自己想要的样式,将对应的样式文件和html代码,拷贝到自己的html中即可。
pycharm中虚拟环境中安装库文件(解决很多库安装了,但import不了的问题)
在pycharm中经常碰到,明明把库安装了,但import不了。主要的还是因为启用了venv虚拟环境的原因,安装的库文件,没有安装到venu环境中。 具体安装步骤如下: 1)cmd 2)d: 3)cd 具体项目的venv目录下,如:D:\pyproject\itchat\venv\Scripts> 4)执行激活虚拟环境命令:D:\pyproject\itchat\venv\Scripts>activate 激活后路径前面会出现(venv) 5)(venv) D:\pyproject\itchat\venv\Scripts> 然后输入执行pip安装库命令就可以了 6)(venv) D:\pyproject\itchat\venv\Scripts>pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas 7)(venv) D:\pyproject\itchat\venv\Scripts>python.exe -m pip install --upgrade pip