应用工厂函数
def create_app():
app = Flask(name)
return app
然后使用Blueprint
拆分视图函数,通常情况下,用户和博客是博客系统最主要的两个实体。
我们就用两个独立的文件分别处理用户相关的视图和博客相关的视图。
在app
文件夹下创建auth.py
和blog.py
,分别编辑其中的内容如下:
~/ahoh/app/auth.py 用户蓝图
from flask import Blueprint
bp = Blueprint(‘auth’,name,url_prefix=‘/auth’)
@bp.route(‘/login’,methods=[‘GET’,‘POST’])
def login():
return ‘login’
@bp.route(‘/register’,methods=[‘GET’,‘POST’])
def register():
return ‘register’
~/ahoh/app/blog.py 博客蓝图
from flask import Blueprint
使用/访问博客蓝图
bp = Blueprint(‘blog’,name,url_prefix=‘/’)
@bp.route(‘/’)
def index():
return ‘index’
@bp.route(‘/detail/int:id’)
def detail(id):
return ‘detail’
然后在__init__.py
中注册蓝图,在create_app()
函数中添加如下代码:
from . import blog,auth # Python 讲究随用随定义,这句可以直接写函数里
app.register_blueprint(blog.bp)
app.register_blueprint(auth.bp)
做完这些之后,蓝图就配置好了,之后的代码里,所有和用户相关的视图都放在auth.py
里,其他就放在blog.py
里面,如果随着功能扩展,有新的重要实体,还可以再新建一个模块。
先测试一下改装是否成功,使用flask run
启动服务,然后在浏览器中输入localhost:5000/auth/login
,或者输入localhost:5000/
试试有什么效果吧!
然后就是重新配置Flask-SQLAlchemy
和Flask-Migrate
插件,我这里准备单独用一个模块管理这些插件。
首先,在app
文件夹下创建exts.py
,然后编辑代码如下:
~/ahoh/app/exts.py 插件模块
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy()
migrate = Migrate()
然后,在__init__.py
中的create_app()
函数中插入以下代码:
from .exts import db,migrate
db.init_app(app)
migrate.init_app(app,db)
这样,两个插件也就准备好了,接下来是配置文件,在app
文件夹下创建settings.py
,编辑内容如下:
class Default(object):
SQLALCHEMY_DATABASE_URI=‘mysql+pymysql://root:_Why62345@localhost/ahoh?charset=utf8’
SQLALCHEMY_TRACK_MODIFICATIONS = True
SECRET_KEY=‘asl;nadflkgaasdfasyfgher’ # 这里需要一个非常复杂的密码字符串
class Development(Default):
ENV=‘development’
DEBUG=True
class Production(Default):
ENV=‘production’
DEBUG=False
然后,在__init__.py
文件中的create_app()
函数中,app=Flask(__name__)
后,插入如下代码:
app.config.from_object(settings.Default)
这样,配置文件也搞定了。
后面就是模型的配置了,先在app
文件夹下创建models.py
文件,然后编辑内容如下:
from exts import db
from datetime import datetime
class TimestampMixin(object):
created = db.Column(
db.DateTime, nullable=False, default=datetime.utcnow)
updated = db.Column(db.DateTime, onupdate=datetime.utcnow)
status = db.Column(db.Integer, default=0)
class User(TimestampMixin, db.Model):
tablename = ‘t_users’
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True)
password = db.Column(db.String(127), nullable=False)
def repr(self):
return ‘<User %r>’ % self.username
这样我们的模型也就绪了,因为我这里把之前的数据全删掉了,所以还需要走一遍上一篇的创建流程,大家可以试试使用flask db migrate/upgrade
能不能成功。
如果不能成功升级,直接删掉migrations
文件夹,删掉数据库,重来。
想要在Flask Shell
中使用db.create_all()
创建所有对象,还需要在__init__.py
中引入User
。
from .models import User # 这句看起来没什么用,没有还真不行
下面再介绍一遍流程:
(venv)~/ahoh$ flask shell
from app.exts import db
db.create_all()
这样就可以创建表了
然后是,使用Flask-Migrate
插件:
(venv)~/ahoh$ flask db init
(venv)~/ahoh$ flask db migrate
(venv)~/ahoh$ flask db upgrade
最后还要添加git
管理的.gitignore
文件,方便后面使用仓库。
在ahoh
文件夹下创建git
的版本控制文件.gitignore
,然后把下面的内容贴进去:
venv/
migrations/
*.pyc
pycache/
instance/
.pytest_cache/
.coverage
htmlcov/
dist/
build/
*.egg-info/
最后,把templates
和static
文件夹复制到app
文件夹下,并在templates
文件夹下创建auth
和blog
文件夹。
这样所有的项目设置就全部完成了,当前项目的结构:
ahoh/
├── README.en.md
├── README.md
├── app
│ ├── init.py
│ ├── templates # 模板文件
│ │ ├── auth # 用户页面
│ │ ├── blog # 博客页面
│ │ └── bash.html # 模板基类
│ ├── static # 静态文件
│ │ └── style.css # css文件
│ ├── auth.py # 用户蓝图
│ ├── blog.py # 博客蓝图
│ ├── exts.py # 插件模块
│ ├── models.py # 模型模块
│ └── settings.py # 默认设置
├── migrations # 数据版本
└── venv # 虚拟环境
这里还少了test
文件夹,由于短时间内用不到,就先不搞了。
当前状态的代码保存到了Gitee仓库的quickstart
分支。如果没有办法根据教程复现代码,可以直接从这个分支开始。
下面就要测试写一些功能,测试以下改版后的结构有没有问题。
首先就是用户注册视图(/register
),修改视图函数代码如下:
@bp.route(‘/register’, methods=[‘GET’, ‘POST’])
def register():
print(‘regist’)
if request.method == ‘POST’:
username = request.form[‘username’]
password = request.form[‘password’]
error = None
if not username:
error = ‘用户名不能为空’
elif not password:
error = ‘密码不能为空’
elif User.query.filter_by(username=username).first() is not None:
error = ‘用户 “{}” 已存在’.format(username)
if error is None:
u = User(username=username,
password=generate_password_hash(password))
db.session.add(u)
db.session.commit()
return redirect(url_for(‘auth.login’))
flash(error)
return render_template(‘auth/register.html’)
base.html
内容如下:
{% block head %}
{% endblock %}
{% block body_content %}
{% endblock %}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
c645858c61d161aec43789.png)
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-1BDSlP4e-1712874526743)]