轻量级Web框架Flask(二)
Flask-SQLAlchemy
MySQL是免费开源软件,大家可以自行搜索其官网(https://www.MySQL.com/downloads/)
测试MySQL是否安装成功
在所有程序中,找到MySQL→MySQL Server 5.6下面的命令行工具,然后单击输入密码后回车,就可以知道MySQL数据库是否链接成功。
右击桌面上的“计算机”,在弹出的快捷键菜单中选择“属性”|“高级系统设置”|“环境变量”,在path里面添加MySQL bin目录的路径。选择环境变量,在环境变量中的path路径下输入你的MySQL路径就行了。默认安装的路径是C:\MySQL\MySQL Server 5.6\bin
安装flask-sqlalchemy,安装不了就更换豆瓣源
pip install flask-sqlalchemy
对象-关系映射实质
class Lib_card(db.Model):
__tablename__ = 'lib_card'
id = db.Column(db.Integer, primary_key=True, comment='id号')
card_id = db.Column(db.Integer, nullable=False, comment = '借书证')
book_id = db.Column(db.Integer, db.ForeignKey('book.id'))
books = db.relationship('Book', backref=db.backref('cards'),uselist=False)
在Flask-SQLAlchemy中,插入、修改、删除操作均由数据库会话管理
需要一个配置config.py
USERNAME= 'root' #设置登录账号
PASSWORD= '930103' #设置登录密码
HOST= '127.0.0.1' #设置主机地址
PORT= '3306' #设置端口号
DATABASE= 'demo1' #设置访问的数据库
SQLALCHEMY_DATABASE_URI= f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}'#创建数据库连接示例
#动态追踪修改设置,如未设置只会提示警告
SQLALCHEMY_TRACK_MODIFICATIONS=False
#查询时会显示原始SQL语句
SQLALCHEMY_ECHO= True
实例
from datetime import datetime from flask import Flask #导入Flask模块
from flask_sqlalchemy import SQLAlchemy #导入SQLAlchemy模块
import config #导入配置文件
app= Flask(__name__) #Flask初始化
app.config.from_object(config) #配置文件实例化
#初始化一个对象
db=SQLAlchemy(app) class Book(db.Model):
__tablename__ = 'book'
id = db.Column(db.Integer, primary_key = True,comment='id号')
title = db.Column(db.String(50), nullable=False,comment='书名')
publishing_office = db.Column(db.String(100), nullable=False,comment='出版社')
isbn = db.Column(db.String(100), nullable=False, comment='isbn号')
storage_time = db.Column(db.DateTime, default=datetime.now(), comment='入库时间') class Lib_card(db.Model):
__tablename__ = 'lib_card'
id = db.Column(db.Integer, primary_key=True, comment='id号')
card_id = db.Column(db.Integer, nullable=False, comment = '借书证')
book_id = db.Column(db.Integer, db.ForeignKey('book.id'))
books = db.relationship('Book', backref=db.backref('cards'),uselist=False) with app.app_context():
#测试数据库连接是否成功
db.create_all() #创建数据库
# book1= Book(id=9,title='智能导论', publishing_office='高等教育出版社',isbn='9787040479844')
# db.session.add(book1)
# db.session.commit()
# result = Book.query.filter(Book.id == 9).first()
# print(result.title)
# agine = Book.query.filter(Book.title == result.title).all()
# for i in agine:
# print(i.id)
# db.session.delete(result)
# db.session.commit()
# card1=Lib_card(card_id='18001', book_id='8')
# card2=Lib_card(card_id='18002', book_id='8')
# db.session.add(card1)
# db.session.add(card2)
# db.session.commit()
book_query = Book.query.filter(Book.id == 9).first()
lib_card_query = book_query.cards
for i in lib_card_query:
print(i.card_id) @app.route('/')
def index():
return 'index' # if __name__== '__main__':
# app.run(debug=True)
注意:一个表(模型)的定义必须要定义一个主键,这个主键一般为id。在定义了Lib_card类后,申明了一个外键,并且在relationship方法中使用uselist=False来约束其关系。book_id =db.Column(db.Integer,db.ForeignKey('book.id'))表示创建一个外键,类型要跟主表一样,通过db.ForeignKey("user.id")与主表绑定books =db.relationship('Book',backref=db.backref('cards');uselist=False)表示Book可以根据Lib_card中的借书证查找到book表中的信息,backref="cards"表示book表可以直接通过cards查找到该书下的借书证号码。
框架实例
建一个apps文件夹,添加一个admin包,admin包下创建三个py文件
#__init__.py
#预加载模块内容
#其他地方调用的时候 可以直接from apps.admin import bp as admin_bp不用找到views
from .views import bp
#forms.py
from flask_wtf import FlaskForm
from wtforms import *
from wtforms.validators import * class NameForm(FlaskForm):
username = StringField('用户名',validators=[DataRequired()])
password = PasswordField('密码',validators=[DataRequired()])
submit = SubmitField('提交')
#models.py
from exts import db class User(db.Model):
__tablename__ = 'jq_user'
uid = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), nullable=False, comment="用户名")
password = db.Column(db.String(100), nullable=False,comment="密码")
email = db.Column(db.String(50), nullable=False, unique=True, comment = "邮箱")
#views.py
from flask import Blueprint, request, flash, render_template
from apps.admin.forms import NameForm
from apps.admin.models import User bp = Blueprint("admin",__name__) @bp.route("/admin",methods=['GET','POST'])
def index():
form = NameForm()
if request.method == 'POST':
if form.validate_on_submit():
username = request.form.get('username')
password = request.form.get('password')
result = User.query.filter(User.username==username).first()
if result and password == result.password:
flash('登录成功')
else:
return render_template('login.html', form=form, errormsg="登陆失败")
return render_template('login.html', form=form)
建一个文件夹templates,专门放login.html文件,通过render_template调用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<h1>用户注册登录</h1>
<form method="post" action="/test/admin">
{{ form.csrf_token()}}
{{ form.username.label }}{{ form.username}}
{{ form.password.label }}{{ form.password}}
{{ form.submit }}{{errormsg}} {% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</form>
</head>
<body> </body>
</html>
建一个app.py
from flask import Flask
from apps.admin import bp as admin_bp
from exts import db
from apps.common import bp as common_bp
from apps.front import bp as front_bp
from apps.admin.models import User
from apps.common.models import Book def create_app():
app = Flask(__name__)
app.secret_key = '123321'
#注册蓝图,注册时候可以设置前缀
app.register_blueprint(admin_bp,url_prefix="/test")
app.register_blueprint(common_bp)
app.register_blueprint(front_bp)
app.config.from_object('config')
# db.app = app
db.init_app(app)
return app if __name__ == '__main__':
app = create_app()
with app.app_context():
db.create_all()
app.run(host="127.0.0.1",port=1314,debug=True)
建一个config.py
DEBUG=True
USERNAME= 'root' #设置登录账号
PASSWORD= '930103' #设置登录密码
HOST= '127.0.0.1' #设置主机地址
PORT= '3306' #设置端口号
DATABASE= 'demo1' #设置访问的数据库
SQLALCHEMY_DATABASE_URI= f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}'#创建数据库连接示例
#动态追踪修改设置,如未设置只会提示警告
SQLALCHEMY_TRACK_MODIFICATIONS=False
#查询时会显示原始SQL语句
SQLALCHEMY_ECHO= True
建一个exts.py
#encoding:utf-8
from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()
轻量级Web框架Flask(二)的更多相关文章
- 轻量级Web框架Flask——Web表单
安装 Flask-WTF及其依赖可使用pip安装 pip install flask_wtf 配置 要求应用配置一个密钥.密钥是一个由随机字符构成的唯一字符串,通过加密或签名以不同的方式提升应用的安全 ...
- 用Python手把手教你搭建一个web框架-flask微框架!
在之前的文章当中,小编已经教过大家怎么搭建一个Django框架,今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文: 1.flask是 ...
- python几个轻量级web框架
python几个轻量级web框架 2016-04-11 18:04:34 惹不起的程咬金 阅读数 7944更多 分类专栏: 云计算/大数据/并行计算 Python 我最近发表了一篇名为 ‘7 Mi ...
- 快速上手python的简单web框架flask
目录 简介 web框架的重要组成部分 快速上手flask flask的第一个应用 flask中的路由 不同的http方法 静态文件 使用模板 总结 简介 python可以做很多事情,虽然它的强项在于进 ...
- 「造个轮子」——cicada(轻量级 WEB 框架)
前言 俗话说 「不要重复造轮子」,关于是否有必要不再本次讨论范围. 创建这个项目的主要目的还是提升自己,看看和知名类开源项目的差距以及学习优秀的开源方式. 好了,现在着重来谈谈 cicada 这个项目 ...
- python web框架Flask——csrf攻击
CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...
- Python超级明星WEB框架Flask
Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模 ...
- Python web框架 flask
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- web框架-(二)Django基础
上面我们已经知道Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Sessi ...
- 【Flask】微型web框架flask大概介绍
Flask Flask是一个基于python的,微型web框架.之所以被称为微型是因为其核心非常简单,同时具有很强的扩展能力.它几乎不给使用者做任何技术决定. 安装flask时应该注意其必须的几个支持 ...
随机推荐
- linux端口映射,telnet通信失败
linux端口映射 1.第一种方法, 使用firewalld # 开启伪装IP firewall-cmd --permanent --add-masquerade # 配置端口转发,将到达本机的123 ...
- BLE目录
CH58x/CH57x 蓝牙从机篇(Peripheral) CH573 CH582 CH579蓝牙从机(Peripheral)/主机(Central)例程讲解一(蓝牙主从机收发数据接口说明) CH57 ...
- Blob、FormData
Blob 在我的理解中这个就是一个二进制的存储类型,就像一张图片就是一组二进制,很多文件都是一组二进制.这个就是数据库用来存储二进制类型. FormData 为什么使用 FormData 来进行数据的 ...
- wmware桥接模式
配置思路(桥接模式) 准备一个与PC机同网段且未被占用的IP地址 将虚拟机的网络模式修改为桥接模式(默认为NAT模式) 修改网卡配置文件,配置为准备好的IP地址,并重启网络服务. 配置DNS解析服务器 ...
- Unity检测鼠标是否与UI交互
在Unity项目中,假设在鼠标按键时会触发游戏内的操作,但是在鼠标与UI进行交互时我们希望停止游戏中的操作,这是需要使用EventSystem中的方法来检测鼠标是否正在与UI交互 private bo ...
- 什么是5G垂直行业?
什么是垂直行业呢? 感觉"垂直行业"这个词在太多地方遇到,但是这个词的涵盖范围到底是什么呢? 垂直这一概念源于两条直线(或平面)的直角交叉,两条直线是相互作为参照物的.比如,我们可 ...
- gitee使用
1.github的国内跳转 github国内无法直接访问,所以直接使用gitee导入github工程 https://gitee.com/ 2.虚拟机配置ssh公钥 https://gitee ...
- 需求分析之道——需求分析要做什么(C系架构设计法,sishuok)
需求分析之道--需求分析要做什么. 需求分析是架构师开始做架构设计的第一步,对架构师来讲非常非常的重要.因为需求分析能够告诉我们,到底我们要做什么,架构设计就是为了去完成这件事情而做的. 接下来,我们 ...
- 学会规则引擎Drools,让你早点下班
前言 现在有这么个需求,网上购物,需要根据不同的规则计算商品折扣,比如VIP客户增加5%的折扣,购买金额超过1000元的增加10%的折扣等,而且这些规则可能随时发生变化,甚至增加新的规则.面对这个需求 ...
- PHP 循环语句
循环机构,在一定的控制下,对此执行. 在PHP中,有以下几种循环 for循环.while循环.do-while循环.forech循环(针对数组) for 循环 语法 for (条件1;条件2;条件3) ...