插个目前实现的登录页面~😄
之前看了很多很多的flask框架的项目结构,了解到它是一个高度灵活的轻量级web框架,意思就是项目的结构不像Django那样有着固定的模式,而是可以根据开发者的爱好进行设计。这也就给想用正儿八经的一种结构写一个网站带来了困扰。好在看了几天的资料后,我大概理清楚了思路,下面进行介绍。
废话不多说,先上我的项目结构(只有把自己的项目结构列出来并讲解清楚,才能至少让他人懂得一种结构),等会会进行详细的介绍。如上图所示,目前我的项目Personalwebsite一共有三个文件夹,分别是app、migrations、tests和两个py文件分别是config.py、manager.py。
这里还要提一下,就是很多人应该和我一样,知道Flask是相当于一个内核的,其本身功能并不多,主要是靠许多的插件来实现丰富的web功能。比如用于等于验证的flask_login,用于连接数据库的flask_alchemy,另外蓝图的开发模式,配置等等这些在开发中经常被提及的名词大家肯定也有所耳闻,那么以上这些到底是什么,我们要如何在项目结构中体现和使用它们呢?我这里不会介绍如何使用它,因为网上已经有很多大佬进行介绍了并且讲的特别清楚,唯一不足的就是没有结合整个项目结构来介绍,会给人一种很突兀的感觉,为什么要在项目中使用这些?它们具体放在项目中的哪些位置?这些是我困惑的地方,也是这篇文章主要要讲的内容。
一、app文件夹
我们知道开发一个网站一般分为三层(第四层就是数据库,存取数据用的),分别是前端的展示页面(这里有大家熟悉的html, css, js等文件)、后端的逻辑页面(用于获取数据库的数据并进行业务逻辑处理,最后把处理好的数据交给前端去渲染展示)和对象关系映射层ORM(这个大家可能没有听过,就是建立一个和数据库的有映射关系的对象,通过这个对象我们就可以直接操纵数据库,而不需要接触SQL语句,这就给开发人员减少了很多压力,也使得后端代码可以少一些SQL语句。)
而在app文件夹中就是存放所有这些层次的代码。App下面有static和templates文件夹是对应前端的代码;views文件夹则是对应后端代码(注意这里后端处理业务逻辑的也叫作视图函数);models.py则是存放ORM层的,在里面有许多的类,一个类就对应数据库中的一张表。
static和templates文件夹
如图这里我只做了登录的前端页面,分别由login.html和login.css。当然这里还有一个images文件夹存放前端的图片。
Views文件夹
这里的views中只有login.py,其实就是处理登录逻辑的一个视图函数。其他的都依次类推,比如要注册,可以设立一个注册的视图函数,也放在views文件夹中。
Models.py
App文件夹下的__init__.py
相信大家注意到了在app文件夹下还有一个__init__.py文件,那么这个文件是用来干啥的呢?在__init__.py中,我们需要构建一个flaskapp实例——app。并且在其中实现所有的配置,数据库,登录验证的实例化等等,说白了就是一个初始化的功能。在__init__.py中我们需要初始化一个加载了所有第三方扩展的app。但是不是用来运行app的,运行app的是后面的manager.py文件。
比如上面提到过的登录验证用的flask_login, 管理数据库的flask_alchemy等等,都需要在__init__.py中进行初始化。
如图,在__init__.py中,我们从config.py导入了配置类,并且导入了flask_login和flask_alchemy等等用于登录验证和连接数据库,同时我们还导入了Bluepring用于所谓的蓝图注册。
然后我们分别创建了对应的实例化对象如:main蓝图(这个蓝图只是一个实例,在views文件夹下的login.py其实也有蓝图,我还没写好,不然也会在__init__.py中导入),db作为ORM对象管理数据库,login_manager用于登录验证。之后我们构建一个create()函数用于构建app并且对蓝图进行注册,加载配置,创建ORM对象和绑定flask_login。
综上所述,在__init__.py我们的工作就是集成所有的功能,并把这些功能全部加载到最终的app应用中,并提供一个create()函数用于返回这个app。而manager.py就可以调用create()函数来得到具有完整功能的app了。
二、Config.py文件
我们知道flask设置配置文件的方法有很多,我这里采用的是写成一个类的形式。关于flask配置文件的内容可以看这篇博客:
https://blog.csdn.***/weixin_62588253/article/details/128576819
如上,我这里配置的信息还比较少,只配置了连接哪个数据库,后续可以在这里添加
三、Manager.py文件
这个文件就是对整个程序进行管理和运行的,但是我还没有写出来。(o(╥﹏╥)o)
四、Migrations文件夹
这个用于存放数据库迁移的一些文件,我也还没写,是看网上博客说有的。大家可以自行查阅
五、Tests文件夹
用于测试程序,我也还没写(o(╥﹏╥)o)。
总结:我认为最关键的就是前面我介绍的app文件夹还有config.py和manager.py,这些是构建项目必须的。其他的是项目做的差不多时需要用的,