日日行,不怕千万里;常常做,不怕千万事|

__username

园龄:2年5个月粉丝:12关注:2

📂python
🔖Python
2023-05-16 21:11阅读: 35评论: 0推荐: 0

flask

other:https://github.com/kitzza/Python/tree/main/flaskProject1

库:

alembic==1.11.0
click==8.1.3
colorama==0.4.6
Flask==2.2.5 # 1
Flask-Migrate==4.0.4
Flask-SQLAlchemy==3.0.3 # 1
greenlet==2.0.2
importlib-metadata==6.6.0
importlib-resources==5.12.0
itsdangerous==2.1.2
Jinja2==3.1.2
Mako==1.2.4
MarkupSafe==2.1.2
PyMySQL==1.0.3 # 1
SQLAlchemy==2.0.13
typing_extensions==4.5.0
Werkzeug==2.2.3
zipp==3.15.0

结构:

代码如下:

from flask import Flask, render_template, request, redirect, url_for
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
from flask_migrate import Migrate
app = Flask(__name__)
# mysql主机
HOSTNAME = "127.0.0.1"
PORT = 3306
USERNAME = "root"
PASSWORD = "123456"
DATABASE = "db516"
app.config[
'SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
# 在app.config中设置好连接数据库的信息
# 然后使用SQLAlchemy(app)常见一个db对象
# SQLAlchemy会自动读取app.config中连接数据库的信息
db = SQLAlchemy(app)
migrate = Migrate(app, db)
# ORM模型映射成表的三步
# 1、flask db init :这个步骤只需执行一次
# 2、flask db migrate : 识别ORM模型的改变,生成迁移脚本
# 3、flask db upgrade: 运行迁移脚本,同步到数据库中
# # 测试连接是否成功
# with app.app_context():
# with db.engine.connect() as conn:
# query_str = text("select 1")
# rs = conn.execute(query_str)
# print(rs.fetchone())
# 创建表
class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# varchar, null=0
username = db.Column(db.String(100), nullable=False)
password = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100))
signature = db.Column(db.String(100))
# 文章表
class Article(db.Model):
__tablename__ = "article"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(200), nullable=False)
content = db.Column(db.Text, nullable=False)
# 添加作者的外键
author_id = db.Column(db.Integer, db.ForeignKey("user.id"))
# backref:会自动的给User模型添加一个article的属性,用来获取文章列表
author = db.relationship("User", backref="articles")
# article = Article(title="flask学习大纲", content="FlaskXXXXXXXX")
# article.author_id = user.id
# user = User.query.get(article.author_id)
# article.author = User.query.get(article.author_id)
# print(article.author)
# # 应用上下文
# with app.app_context():
# db.create_all() # 这个有局限性,新增属性不会更新
# user = User(username="张三", password='111111')
# sql: insert user (username, password) values ("张三","111111")
# user创建用户
@app.route("/user/add")
def add_user():
# 1、创建ORM对象
user = User(username="张三", password='111111')
# 2、将ORM对象添加到db.session中
db.session.add(user)
# 3、将db.session中的改变同步到数据库中
db.session.commit()
return "创建成功!"
# user数据库查询
@app.route('/user/query')
def query_user():
# 1、 get查找:根据主键查找
# user = User.query.get(1)
# print(f'{user.id}--{user.username}--{user.password}')
# 2、filter_by查找
# Query:类数组
users = User.query.filter_by(username="张三")
print(type(users)) # <class 'flask_sqlalchemy.query.Query'>
for user in users:
print(user)
return "数据查找成功"
# user修改
@app.route('/user/update')
def update_user():
user = User.query.filter_by(username="张三").first()
user.password = "222222"
db.session.commit()
return "数据修改成功!"
# user删除
@app.route('/user/delete')
def delete_user():
# 1、查找
# get查找:根据主键查找
user = User.query.get(3)
# 2、从db.session中删除
db.session.delete(user)
# 3、将db.session中的修改,同步到数据库中
db.session.commit()
return "数据删除成功"
# 文章添加
@app.route('/article/add')
def article_add():
article1 = Article(title="flask学习大纲", content="FlaskXXXXXXXX")
article1.author = User.query.get(2)
article2 = Article(title="Django学习大纲", content="DjangoXXXXXXXX")
article2.author = User.query.get(2)
# 添加到session中
db.session.add_all([article1, article2])
# 同步session中的数据到数据库中
db.session.commit()
return "文章添加成功!"
# 文章查找
@app.route('/article/query')
def query_article():
user = User.query.get(2)
for article in user.articles:
print(article.title)
return "文章查找成功"
# 自定义过滤器
def datetime_format(value, format="%Y-%d-%m %H:%M"):
return value.strftime(format)
app.add_template_filter(datetime_format, "dformat")
class User2:
def __init__(self, username, email):
self.username = username
self.emil = email
# 测试
@app.route('/')
def hello_world(): # put application's code here
user = User2("你的帅哥", email="552551@qq.com")
info_dict = {
'name': "账务",
'age': 18
}
return render_template('index.html', user=user, info_dict=info_dict)
# 登录
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
print("登录成功")
return redirect(url_for('login_success'))
else:
return render_template('login.html')
# 登录成功
@app.route('/login_success')
def login_success():
return render_template('login_secc.html')
# 主页
@app.route('/index')
def index():
name = "张三"
return render_template("index.html", name=name)
# 带参数的url 将参数固定到了path中
@app.route('/blog/<int:blog_id>')
def blog_detail(blog_id): # 博客详情
# return f"访问的博客id是{blog_id}"
return render_template('blog_detail.html', blog_id=blog_id)
# 查询字符串的方式传参
# /book/list 返回第一页的数据
# /book/list?page=2 获取第二页的数据
@app.route('/book/list')
def book_list():
# request.args 类字典类型
page = request.args.get("page", default=1, type=int)
return f'获取的是{page}页数'
# Jinja2内置过滤器使用
@app.route('/filter')
def filter_demo():
user = User("你的帅哥", email="56565@qq.com")
# 自定义过滤器
mytime = datetime.now()
return render_template('filter.html', user=user, mytime=mytime)
# 控制语句
@app.route('/control')
def control_statement():
age = 17
books = [{
"name": "三国演义",
"author": "罗贯中"
}, {
"name": "水浒传",
"author": "施耐庵"
}, ]
return render_template("control.html", age=age, books=books)
# 模板继承
@app.route('/child1')
def child1():
return render_template('child1.html')
# 模板继承
@app.route('/child2')
def child2():
return render_template('child2.html')
@app.route('/static')
def static_demo():
return render_template('static.html')
if __name__ == '__main__':
app.run(debug=True)

Jinja2模板

base

继承

posted @   __username  阅读(35)  评论(0编辑  收藏  举报

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起