python-flask(三)
发布日期:2022-02-01 14:28:05
浏览次数:1
分类:技术文章
本文共 7410 字,大约阅读时间需要 24 分钟。
连接数据库
sqlalchemy
- 数据库驱动: pip install pymysql 或者 pip install sql-connector
- 在flask虚拟环境中安装sqlalchemy pip install flask-sqlalchemy 默认安装:Successfully installed SQLAlchemy-1.3.8 flask-sqlalchemy-2.4.0
settings.pyclass Config: DEBUG = False TESTING = False # mysql+pymysql://user:password@host:port/database # SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://gjp:976431@49.235.194.73:3306/test' SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://root:root@127.0.0.1:3306/mydb' SQLALCHEMY_TRACK_MODIFICATIONS = True
- 安装: pip install flask-script
a. 设置服务器
原来: python app.py python app.py runserver -h host -p port ----> 使用脚本命令的方式控制服务器启动b. 控制sqlachemy数据库
pip install flask-migrate 绑定命令到script上exts |-- __init__.py | db =SQLAlchemy() def create_app(): app = Flask(__name__) ... db.init_app(app) migrate = Migrate(app=app,db=db) manager.add_command('命令名',MigrateCommand) 使用命令: db python app.py db init ----------> 产生一个文件夹 migrations 此文件中存在versions文件夹 versions作用: 保存你做出的各种更改 xxxx.py xxxx.py
apps:__init__.pyfrom flask import Flaskfrom apps.views.blog_view import blog_bpfrom exts import dbfrom settings import DevelopmentConfigdef create_app(): app = Flask(__name__) app.config.from_object(DevelopmentConfig) db.init_app(app) # 注册蓝图 app.register_blueprint(blog_bp,url_prefix='/blog') return appexits:__init__.pyfrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()app.pyfrom flask_migrate import MigrateCommand, Migratefrom flask_script import Managerfrom apps.models.user_model import Userfrom apps import create_appfrom exts import dbapp = create_app()manager = Manager(app)# 创建数据库命令migrate = Migrate(app=app, db=db) # db 就是SQLAlchemy对象manager.add_command('db', MigrateCommand)if __name__ == '__main__': # app.run() manager.run()apps:models:user_models.pyfrom exts import db# db 就是SQLAlchemyclass User(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(10), nullable=False) password = db.Column(db.String(10), nullable=False) phone = db.Column(db.String(11), nullable=False, unique=True) def __str__(self): return self.username
步骤:
- 创建app
- 创建SQLAlchemy并绑定app
- 创建manager并且绑定migrate
- Templates+view+Blueprint
import hashlibfrom flask import Blueprint, render_template, request, redirect, url_forfrom sqlalchemy import or_from apps.models.blog_model import Userfrom exts import dbblog_bp = Blueprint('blog', __name__, url_prefix='/blog')# 首页@blog_bp.route('/', endpoint='index')def index(): return render_template('index.html')# 用户更新@blog_bp.route('/update', endpoint='update', methods=['GET', 'POST'])def user_update(): if request.method == 'GET': id = request.args.get('id') user = User.query.get(id) # 要更新的用户对象 return render_template('update.html', user=user) else: id = request.form.get('id') username = request.form.get('username') phone = request.form.get('phone') isdelete = request.form.get('isdelete') user = User.query.get(id) # 要更新的用户对象 user.username = username user.phone = phone # isdelete添加判断 db.session.commit() return redirect(url_for('blog.uall'))# 用户删除@blog_bp.route('/delete/', endpoint='delete')def user_delete(id): user = User.query.get(id) # 根据主键查找对象 # print(user) # db.session.delete(user) # 物理删除 user.isdelete = True db.session.commit() return redirect(url_for('blog.uall'))# 用户检索@blog_bp.route('/search', endpoint='search', methods=['POST'])def user_search(): search = request.form.get('search') if search: # users = User.query.filter(or_(User.username==search, # User.phone == search)).all() # select * from user where username=search or phone=search # number = User.query.filter(or_(User.username==search, # User.phone == search)).count() users = User.query.filter(or_(User.username.like('%' + search + '%'), User.phone == search)).all() number = User.query.filter(or_(User.username.like(search), User.phone == search)).count() return render_template('user_all.html', users=users, number=number) else: return redirect(url_for('blog.index'))# 显示所有用户@blog_bp.route('/userall', endpoint='uall')def user_all(): # users = User.query.filter_by(isdelete=False).all() # users = User.query.filter(User.isdelete == False, User.phone.startswith('150')).order_by(-User.rdatetime) users = User.query.all() number = User.query.count() return render_template('user_all.html', users=users, number=number)# 用户登录@blog_bp.route('/login', endpoint='login', methods=['GET', 'POST'])def user_login(): if request.method == 'POST': username = request.form.get('username') pwd1 = request.form.get('password1') pwd = hashlib.sha1(pwd1.encode('utf-8')).hexdigest() # 查询 user = User.query.filter_by(username=username).first() # select * from user where username=xxxx if pwd == user.password: return '用户登录成功!' else: return render_template('login.html', msg='用户名或者密码有误!') return render_template('login.html')# 用户注册@blog_bp.route('/register', endpoint='register', methods=['GET', 'POST'])def user_register(): if request.method == 'POST': # 获取表单提交的内容 username = request.form.get('username') pwd1 = request.form.get('password1') pwd2 = request.form.get('password2') phone = request.form.get('phone') if pwd1 == pwd2: # 存放到数据库 pwd = hashlib.sha1(pwd1.encode('utf-8')).hexdigest() print(pwd) # 添加数据步骤: # 1. 创建模型对象 user = User() # 2. 给对象赋值 user.username = username user.password = pwd user.phone = phone # 3. 向数据库提交数据 db.session.add(user) db.session.commit() return redirect(url_for('blog.index')) else: return render_template('register.html', msg=' 密码不一致') return render_template('register.html')
删除和更新;
物理删除:
- 根据主键找到要删除user对象 user = User.query.get(id) # 根据主键查找对象
- 利用db.session完成删除操作 db.session.delete(user)
- 提交 db.session.commit()
逻辑删除:
- 根据主键找到要删除user对象 user = User.query.get(id) # 根据主键查找对象
- 更改isdelete user.isdelete=True
- 提交更改 db.session.commit()
{ % block title %} 首页 { % endblock %} { % block mycss %} { % endblock %} { % block content %} { % endblock %}{ % block myjs %} { % endblock %}
转载地址:https://blog.csdn.net/shunjianxaioshi/article/details/107009418 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年05月07日 19时21分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Squid配置文件详解
2019-05-05
(12) Hadoop 升级技能
2019-05-06
(总结)Nginx配置文件nginx.conf中文详解
2019-05-06
wget 下载
2019-05-06
HTTPS的七个误解
2019-05-06
ssl证书配置
2019-05-06
为什么使用<!DOCTYPE HTML>
2019-05-06
leetcode 477 Total Hamming Distance C++
2019-05-06
笑话收集
2019-05-06
超级程序员神话
2019-05-06
advanced installer制作windows软件安装界面
2019-05-06
操作系统读书笔记
2019-05-06
2017年计划
2019-05-06
【转】电容滤波的两个要点_Detective_ALong_新浪博客
2019-05-06
html5星星评分组件,sass双循环写法
2019-05-06
h5锁屏提醒-锁横屏和锁竖屏
2019-05-06
LeetCode 方法详解
2019-05-07
View事件分发情况总结
2019-05-07
运放(二):运放带宽
2019-05-07