基于windows环境的Flask网站搭建(mysql + conda + redis)

1下载mysql-installer-community-5.7.24.0.msi

(https://dev.mysql.com/downloads/windows/installer/8.0.html, 选择 Looking for previous GA versions?

2.安装

2.1选择模块

2.2安装方式

2.3设置密码

2.4查看环境变量

 3. 配置数据库

3.1 配置服务器编码

在my.ini文件下修改(默认在C:\ProgramData\MySQL\MySQL Server 5.7,可通过查看服务启动配置文件获取):

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

character-set-server=utf8 //注意这里和client,mysql不一样

注意: mysql到了5.5版本, [mysql] 项内可以写default-character-set=utf8, 但是[mysqld] 项内不能再这么写了,而是必须写:character-set-server=utf8

重启服务net stop mysql57,net start mysql57

3.2 连接mysql

Cmd窗口输入mysql -u root -p,输入密码

3.3 创建数据库

create database mydatabase;

3.4 设置数据库编码方式

查看编码, show variables like ‘%character%‘;

可以通过命令 set character_set_connection = utf8;逐项修改,Windows下关注 character_set_database character_set_server character_set_system 三项就可以了

4. Anaconda3 + python3.6 + mysql + flask-sqlalchemy + flask-migrate配置

4.1配置Anaconda

开始菜单中启动Anaconda prompt

查看所有虚拟环境
conda info -e  或 conda env list 

切换平台

set CONDA_FORCE_32BIT=1  //切换到32位

set CONDA_FORCE_32BIT=   // 切换到64位

创建新python环境

conda create -n env_name python=3.6 # 指定python为3.6,否则安装最新版本

conda create -n env_name numpy matplotlib python=3.6 # 同时安装必要的包

切换环境

conda activate env_name

conda deactivate env_name

移除环境

conda remove -n env_name --all

查看环境安装的包

conda list

conda list -n env_name

当前中环境安装包

conda install python3.6

  

4.2在conda虚拟环境下通过pip安装 flask、mysql-connector-python、flask-sqlalchemy

4.3 按照flask、flask-sqlalchemy、flask-migrate 编写代码,并在flask配置项中配置数据库:

SQLALCHEMY_DATABASE_URI = ‘mysql+mysqlconnector://uname:[email protected]:3306/mydatabase?charset=utf8;use_unicode=False‘

其中,use_unicode用于解决读取二进制数据时报错:UnicodeDecodeError:‘utf-8‘ codec can‘t decode byte 0xb0 in position 0

  

4.4关于使用flask-migrate初始化、迁徙、更新数据库

python manager db init 创建初始化脚本

python manager db migrate 创建迁徙版本(版本数据表alembic_version )

python manager db upgrade生成对应版本数据库

备注:初次按顺序执行如上三条指令时,效果同初始化数据库;

后续迁徙数据库时,依次执行后两条指令,迁徙成功后数据库数据会保留;
经测试,在python3.6环境下执行第二步时会出错:

File "D:\ProgramData\Anaconda3\envs\flask-test\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1996, in get_table_names

    self.identifier_preparer.quote_identifier(current_schema))

  File "D:\ProgramData\Anaconda3\envs\flask-test\lib\site-packages\sqlalchemy\sql\compiler.py", line 3067, in quote_identifier

    self._escape_identifier(value) +
File "D:\ProgramData\Anaconda3\envs\flask-test\lib\site-packages\sqlalchemy\dialects\mysql\mysqlconnector.py", line 97, in _escape_identifier

    value = value.replace(self.escape_quote, self.escape_to_quote)

TypeError: <flask_script.commands.Command object at 0x0000011690B8D4E0>: a bytes-like object is required, not ‘str‘

根据日志修改Anaconda3\envs\flask-test\lib\site-packages\sqlalchemy\sql\compiler.py 的3067行,增加如下代码:

if not isinstance(value, str):
    value = str(value, ‘utf-8‘)

在flask数据库配置为sqlite情况下,测试迁徙成功:

app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘sqlite:///app.db‘

在flask数据库配置为mysql情况下,首次执行初始化数据库时可以成功,但在Model文件变动后迁徙数据库时出现 Table ‘***‘ already exists错误

  

使用flask-migrate一是出现python3.X下代码兼容问题,二是无法在mysal下成功完成数据库迁徙,故综上放弃flask-migrate的配置与使用,

同时需要修改使用flask-sqlalchemy原生的数据库创建方式,在app初始化代码后面增加:db.create_all()

5. 配置redis及flask-session

默认flask采用secret cookies方式进行session存储的,这种存储方式将需要的信息传输到浏览器端后存储在加密后cookies信息中,经测试这种方式存在浏览器兼容性,在手机端(ios)UC浏览器中,当flask服务端调用session.clear()清除session信息时(例如像主动退出登录这样的场景时),浏览器端并未成功清除掉登录信息,从而导致无法退出登录,必须清空浏览器缓存

故采用redis作为session存储方式,同时redis也可配置作为flask缓存,在python代码中直接调用

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库

5.1下载并安装配置redis

Windows系统下载微软客制版本https://github.com/MicrosoftArchive/redis

Linux系统下载官网版本 https://redis.io/download

Linux下需要先编译再安装,ubuntu下也可使用$sudo apt-get install redis-server进行安装,安装完成的redis包含两个模块redis-server 和 redis-cli, 其中redis-cli是命令行客户端

在安装目录找到conf文件(windows下有两个,根据需求选择),修改或添加如下内容:

requirepass mypassword 为redis # 设置密码

port 8880 #修改端口号
Windows下安装为系统服务:

 redis-server --service-install redis.windows.conf //安装服务

 redis-server --service-start //启动服务

 redis-server --service-stop //停止服务

 redis-server --service-uninstall //卸载服务
Linux下安装和配置为自启服务参考:

https://www.cnblogs.com/skyessay/p/6433349.html

https://www.jb51.net/article/101508.htm

服务启动后可以使用redis-cli测试:

连接redis

redis-cli.exe -h 127.0.0.1 -p 8880

密码认证

auth ‘mypassword‘

切换数据库(redis有16个[0-15]数据库,默认连接使用的是0)

select 1

查看当前所有索引

127.0.0.1:8880> keys *

字符串存取

set myKey abc

get myKey

哈希值存取

hmset myhash field1 "Hello" field2 "World"

hget myhash field1

列表集合存取

lpush mylist element1

lpush mylist element2

Lrange mylist 0 10

set集合值存取

sadd myset member1

sadd myset member2

Smembers key

zset有序集合(zadd myzset score member,score为序号)

zadd myzset 0 member1

zadd myzset 0 member2

Zrangebyscore myzset 0 10

  

其他操作见https://www.runoob.com/redis/redis-tutorial.html

5.2安装redis,flask-session模块:

pip install redis

pip install flask-session

在flask配置项中配置flask的session type为redis

SESSION_TYPE = ‘redis‘  # session类型为redis

SESSION_PERMANENT = True  # 会话持久化

PERMANENT_SESSION_LIFETIME = 60 * 30  # 持久化时间设为30分钟

SESSION_USE_SIGNER = True  # 是否对发送到浏览器上session的cookie值进行加密

SESSION_KEY_PREFIX = ‘session:‘  # 保存到session中的值的前缀

SESSION_REDIS = redis.Redis(host=‘localhost‘, port=8880, password=‘mypassword‘, db=1)  # 用于连接redis的配置

6. 打包项目并移植到新环境

使用wheel对flask项目进行打包移植,打包移植分为2种方式,

一种是打包成为模块并安装到新环境,

另外一种则是仅配置当前环境依赖文件,将源码移植到新环境后按照配置一键部署新环境

6.1首先需要在项目根目录配置setup.py和 MANIFEST.in文件,并确保项目已安装wheel模块,具体可参考flask及pypa官方文档

https://dormousehole.readthedocs.io/en/latest/tutorial/install.html

https://packaging.python.org/tutorials/packaging-projects/

#[setup.py]

from setuptools import find_packages, setup

setup(

    name=‘myproject‘,

    version=‘1.0.0‘,

    author="myname",

    description="myproject‘package",

    packages=find_packages(),

    include_package_data=True,

    zip_safe=False,

    install_requires=[

        ‘flask‘,

        ‘flask-sqlalchemy‘,

        ‘flask-session‘,

        ‘mysql-connector-python‘,

        ‘redis‘

    ],

    classifiers=[

        "Programming Language :: Python :: 3",

]

[manifest.in]

graft instance

graft myproject/instance

graft myproject/resources/font

graft myproject/static

graft myproject/templates

include start.py

global-exclude *.pyc

# 备注:graft指定拷贝的无依赖静态文件目录, include指定非模块py文件,global-exclude 指定忽略所有pyc(python可执行)文件

在当前python环境中执行python3 setup.py sdist bdist_wheel,会在dist目录生成tar.gz源码和whl模块两个文件

6.2源码移植

将tar.gz源码解压到新目录,在新python虚拟环境中定位到当前目录并执行pip install -e . ,pip会在当前文件夹中寻找 setup.py 并安装所需依赖(此时源码在当前路径也会被pip识别为一个模块)

6.2模块移植

模块移植是指在新python虚拟环境中定位到前面生成的whl文件并执行pip install ***.whl 进行安装pip会将模块安装到site-packages目录下,就像安装其他模块那样

 

注意:模块安装本身不存在什么问题,但是模块打包并不会将flask项目根目录的入口文件包含进去(模块仅会打包指定模块目录下的文件,如前文的myproject目录),故将flask项目作为模块安装后,在新环境下需要重新编写入口文件并启动app对象,同时要保证配置文件能够被正确识别到,当flask项目模块中设置instance_relative_config=True时,其读取配置文件的路径为:

envs\\mytest-flask\\var\\myproject-instance\\config.py

 

Flask的默认读取配置文件的路径在当前代码目录,如果在初始化时设置了instance_relative_config=True,则读取的配置文件路径在根目录下instance文件夹:

在配置文件中的关联路径的行为可以在 “关联到应用的根路径”(缺省的)和 “关联到实例文件夹”之间变换, 具体通过应用构建函数中的 instance_relative_config 来实现:

app = Flask(__name__, instance_relative_config=True)

如果使用虚拟python环境,建议采用源码移植部署方式,或者在flask项目打包前将instance_relative_config配置为False,同时在将配置文件及其它初始化文件放置应用模块根目录下

 

如果使用系统python环境,可使用模块移植部署方式(此时flask项目将会作为模块安装到系统python模块目录),并编写项目入口文件,将配置文件及其他初始化文件按照应用应用实例文件夹分开放置

原文地址:https://www.cnblogs.com/applex007/p/10287355.html

时间: 2024-08-30 09:26:22

基于windows环境的Flask网站搭建(mysql + conda + redis)的相关文章

基于Linux环境Tomcat-MySQL的服务器搭建

在开发日趋激烈的今天,我们可不能再只会编码了,这样搞不好,就成了一辈子的码奴!所以这里简单的分享一下服务器的搭建,由于Linux的安全性等一切因素让它成为了服务器平台的首选环境!今天跟大家分享的是Java项目的服务器搭建,好啦,步骤来了: 1.下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 2.下载tomcat wget http://apache.etoak.co

基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案

基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器进行设置之类的,结果没有一个有效果,暑假学习了用Dos来开发Java程序,输入cmd命令中dir(directory)进行查询操作时,显示了一堆中文乱码,原本是想重装系统的,因为电脑里面重要东西有点多,所以自己花了一段时间捣鼓了一下电脑,终于解决了如上两个问题,现在心里很开心,附上如下两幅图: cm

Windows环境下使用Nginx搭建负载均衡

前言 最近没有什么事情,喜欢总结并学习东西!前几天写来一个Session共享,那么我们为什么需要Session共享?因为我们的应用程序分布在多个服务器上,为了合理分配用户的请求,就需要用到负载均衡技术(将请求/数据[均匀]分摊到多个操作单元上执行). 怎样实现负载均衡? 1.  使用F5硬件来实现 2. 使用Nginx 工具来搭建一个. 下面我们就讲解一下,在Windows环境下,怎样部署Nginx及常见问题. 一:下载Nginx 去官网下载最新的 Windows-1.11.10 并解压到英文目

windows 环境下Maven私服搭建

使用Nexus.3.11在Windows环境上搭建1.下载nexus.3.11.zip包https://www.sonatype.com/download-oss-sonatype 下载下来之后,进行解压缩 默认情况下,无需修改,但我们须确认一些信息 1=> 端口号修改位置,若后面启动时,端口号占用的情况下,须修改此处2=> nexus启动时的根路径,默认为'\' 二.运行nexus.exe在该目录下cmd打开远程客户端,进入nexus-3.0.1-01\bin下.这里可以在环境变量里把nex

Windows环境下 PyQt5 如何安装MySql驱动 (PyQt5连接MYSQL时显示Driver not loaded解决方案)

参考文章: https://blog.csdn.net/qq_38198744/article/details/80261695 前文说过如何在Ubuntu环境下 为PyQt5  安装MySql驱动, 这里面主要说的是如何在Windows环境下安装MySql驱动. # -*- coding: utf-8 -*- ''' [简介] PyQt5中 处理database 例子 ''' import sys from PyQt5.QtCore import * from PyQt5.QtGui impo

Windows环境下MongoDB的搭建

MongoDB的官网下载地址:https://www.mongodb.com/download-center 点击Community Server进入社区版下载页面 当前的稳定版本为(Current Stable Release)为3.6.2 版本的选择: MongoDB的版本命名规则:x.y.z y为奇数时表示当前版本为开发版,如:3.3.0.3.5.1: y为偶数时表示当前版本为稳定版,如:2.8.1.3.6.2: 平台支持: MongoDB多平台支持,在Windows环境下尽量使用64位版

基于Windows Server 2012 R2 x64搭建Redmine

Highlight: 参考文档:http://www.redmine.org/projects/redmine/wiki/RedmineInstall mysql和redmine在同一台主机上,实际部署时可单独部署mysql. 本文不包括整合Apache/Nginx. 以下内容在virtualbox虚拟机上测试可行. OS环境 操作系统:Windows Server 2012 R2 x64 英文标准版(MSDN下载ISO) 安装完系统后,安装以下patch,这些patch都可以从微软官方网站下载

Windows环境下Jekyll+Github搭建个人博客

萌新来讲讲如何使用 Jekyll 搭建个人博客,从安装到配置!炒鸡详细!.原文地址https://zhangmingemma.github.... 介绍 jekyll是一个静态站点生成器,会根据网页源码生成静态文件. 简单.无需数据库,评论功能,不需要不断更新版本,只用关注你的博客内容 静态.只用Markdown(或者Textile).Liquid.HTML&CSS就可以构建可部署的静态网站 博客形态.自定义地址.分类页面.分类博客内容以及自定义的布局设计 使用GitHub Pages可以运行j

Flask网站搭建:Ubuntu 14.04 sever (阿里云64bit) 部署 flask + uWSGI + Ngnix

第一次写技术类的博客,有点小激动.这篇文章整合了多方资源,将在文末附上链接,非常感谢作者的帮助.同时也希望这篇博客能帮助像我一样的外行玩家快速搭建自己的网站.如果文章有什么不妥的地方,希望大家留个脚印哈- 一.购买云服务器+域名 1.购买服务器和域名 一开始我是购买的购买腾讯的学生特惠套餐,结果忘(lao)了(nian)续(chi)费(dai),所以只好转投阿里的云翼计划,也是相当实惠的,不过腾讯的用户体验是真心好(除了要每月续费外).域名我是从新网那边迁到万网的,需要重新备案外加续费一年.下面