Flask ==> 目录结构

本文介绍如何搭建Flask项目的基本目录结构,并通过flask-sqlalchemy进行数据库操作,包括配置、表设计及基本的CRUD操作。

Flask ==>   目录结构

一:目标

1.要求:

  1. 熟悉Flask的目录结构。

  2. 了解应用,装上新的组件往里面放,改怎么弄?

 

2.作业: 

  1.基于flask实现权限管理

  2.笔记:

    -  flask的请求周期

 

二:目录结构内容

知识点:

  1.  从全局上了解flask项目的目录结构

  2. flask项目的运行机制

  3.flask框架实现MVC架构

  4.flask-sqlalchemy  操作mysql数据库

 

流程步骤:

  1.新建项目:blog系统

 

完成后的目录结构是这样的:非常简单,一个static文件夹,一个templates文件夹,一个py文件,如下:

 

  2.目录结构重构,引入包管理

1.针对上面的结构,在最上层blog2目录下,做如下操作:

  1.新建一个runserver.py 文件, 作为“项目统一入口文件” 

  2. 新建blog2文件夹,把已经存在的 static,templates, blog2.py 移到blog2文件夹下,

  3. 然后分别创建 controller  , model 包(右击blog2, 选择 python packge )。 把blog2.py  改名为 __init__.py  ,

  4.新建setting.py 文件。

现在目录结构如下:

  

这样就相当于一个大工程的结构了:

分析:

  1. 最上层的 blog2 目录是项目名称,一个项目下可以包括多个模块,也就是应用,每个应用下有自己的配置文件,初始化文件,MVC架构。

  2. runserver.py : 与应用模块评级,作为项目启动为文件。  

  3.第二级blog2目录: 模块名称

    controller : MVC 中的 C, 主要存放 视图函数。

    model   : MVC 中的 M , 主要存放 实体类文件,映射数据库表

    templates : MVC 中的V, 主要存放 html 文件

    static : 静态文件, 主要存放 css, js 等文件

    __init__.py : 模块初始化文件, Flask 程序对象的创建必须在 __init__.py   文件里完成, 然后就可以安全的导入引用每个包。

     setting.py  : 配置文件,数据库用户名密码等等

 

三, 开发代码

1. 先把项目运行起来:

   1. 编写__init__.py文件, 创建项目对象,代码如下:

from flask import Flask

#创建项目对象
app = Flask(__name__)

 

  2. 在 runserver.py , 添加如下代码

from blog2 import app

@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run(debug=True)

 

   3. 运行runserver.py 文件:

 

然后在浏览器中输入:http://127.0.0.1:5000/,会显示helloworld字样

 

 到这里为止,项目的雏形就可以正常运行了,下面的事情就简单了,添加内容,让项目有血有肉。

 

2.修改配置文件。

  1. 修改setting.py 文件,添加配置数据库连接信息,如下:

 

  2.让项目读取配置文件

修改_init__,py : 添加如下内容(红色部分):

# -*- coding: utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
#import  os
#print os.environ.keys()
#print os.environ.get('FLASKR_SETTINGS')
#加载配置文件内容
app.config.from_object('blog2.setting')     #模块下的setting文件名,不用加py后缀 
app.config.from_envvar('FLASKR_SETTINGS')   #环境变量,指向配置文件setting的路径

#创建数据库对象 
db = SQLAlchemy(app)

 

 

  3.设计数据库

1.本次练习比较简单,就两个表,一个user表,一个文章表。我们采用python的orm框架flask-sqlalchemy实现表的创建、增删改查功能。

在model文件夹中添加User.py和Category.py文件,内容如下:

 1.user.py

from blog2 import db

class User(db.Model):
    __tablename__ = 'b_user'
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(10),unique=True)
    password = db.Column(db.String(16))

    def __init__(self,username,password):
        self.username  = username
        self.password = password
    def __repr__(self):
        return '<User %r>' % self.username

 

2.category.py

from blog2 import db

class Category(db.Model):
    __tablename__ = 'b_category'
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(20),unique=True)
    content = db.Column(db.String(100))

    def __init__(self,title,content):
        self.title = title
        self.content = content
    def __repr__(self):
        return '<Category %r>' % self.title
复制代码

 

   3.创建数据库和表

 

 

 

 

  

 

转载于:https://www.cnblogs.com/zhongbokun/p/8284540.html

<think>我们正在讨论的是在Android设备树(Device Tree)中修改屏幕物理尺寸的配置参数。根据用户的问题,需要修改的是sprd,width-mm和sprd,height-mm这两个参数,它们通常用于定义屏幕的物理宽度和高度(单位毫米)。这些参数在设备树中定义,用于内核和显示子系统计算屏幕的DPI(每英寸点数)等属性。 ### 步骤1: 定位设备树源文件(DTS) 设备树配置通常位于内核源码的`arch/arm/boot/dts/`(或对应架构的目录)下。具体路径可能因平台而异,对于Spreadtrum (SPRD) 平台,可能位于类似`arch/arm/boot/dts/sprd/`的目录下。需要找到对应设备(如`sp9863a-1h10.dts`)的dts文件。 ### 步骤2: 修改屏幕尺寸参数 在设备树文件中,屏幕的物理尺寸通常在显示控制器(display controller)节点或与屏幕相关的节点中定义。查找包含`sprd,width-mm`和`sprd,height-mm`属性的节点。例如: ```dts panel { compatible = "sprd,sc9863a-lcd"; ... sprd,width-mm = <68>; // 屏幕物理宽度,单位毫米 sprd,height-mm = <121>; // 屏幕物理高度,单位毫米 ... }; ``` 修改这两个参数的值即可改变屏幕的物理尺寸配置。例如,将宽度改为68mm,高度改为121mm(假设5.46英寸屏幕的对角线尺寸,根据宽高比换算)。 #### 计算示例(5.46英寸屏幕): 假设屏幕分辨率为720×1440(常见于5.46英寸设备),宽高比为18:9(即2:1),则: - 对角线尺寸:5.46英寸 = 138.684毫米 - 设宽度为$W$毫米,高度为$H$毫米,且$H = 2W$(宽高比2:1) - 根据勾股定理:$W^2 + H^2 = W^2 + (2W)^2 = 5W^2 = (138.684)^2$ - 解得:$W \approx \frac{138.684}{\sqrt{5}} \approx 62.0$毫米,$H \approx 124.0$毫米 因此,可设置: ```dts sprd,width-mm = <62>; sprd,height-mm = <124>; ``` ### 步骤3: 编译并刷写设备树 修改后,需要重新编译设备树,并将生成的dtb文件刷入设备: 1. **编译内核或设备树**:在Linux内核源码目录下执行编译命令(如`make dtbs`)。 2. **替换设备树镜像**:将生成的dtb文件刷入设备的boot分区或dtbo分区(具体取决于设备分区结构)。 ### 注意事项 1. **参数影响**:修改这些参数会改变系统报告的屏幕物理尺寸,进而影响DPI计算(DPI = 像素数 / 英寸数)。例如,系统服务(如SurfaceFlinger)会使用这些值计算密度。 2. **验证方法**:在Android系统中,可通过`adb shell`执行以下命令验证修改: ```bash adb shell dumpsys display | grep mPhysicalDisplayMetrics ``` 输出应包含修改后的物理尺寸(毫米)和计算出的DPI。 3. **兼容性**:确保修改后的尺寸与屏幕实际物理尺寸匹配,否则可能导致显示内容缩放异常。 ### 引用说明 - 引用[1]展示了在SystemUI中添加自动亮度图标的修改,但与本问题无关。 - 引用[2]展示了在布局文件中根据条件加载不同布局的代码,同样不直接相关。 - 引用[3]是关于build.prop中铃声配置的示例,与设备树修改无关。 因此,我们主要依赖设备树标准知识和计算完成本回答。 §§相关问题§§ 1. 如何计算屏幕的DPI值? 2. 设备树(Device Tree)在Android系统启动过程中扮演什么角色? 3. 修改设备树后如何在不重新编译整个内核的情况下更新设备?</think>在 Android 开发中修改设备树(Device Tree)中的屏幕物理尺寸参数(如 `sprd,width-mm` 和 `sprd,height-mm`)需要修改内核级的设备树配置。以下是详细步骤: ### 1. **定位设备树文件** - 设备树文件通常位于内核源码的 `arch/arm/boot/dts/` 目录下(路径可能因平台而异) - 查找与设备型号匹配的 `.dts` 或 `.dtsi` 文件(如 `sprd-sc9863a.dtsi`) - 屏幕参数通常在显示控制器节点中定义,例如: ```dts &lcd_panel { sprd,width-mm = <68>; // 屏幕物理宽度(毫米) sprd,height-mm = <121>; // 屏幕物理高度(毫米) }; ``` ### 2. **修改屏幕尺寸参数** 1. 打开对应的设备树文件 2. 找到包含 `sprd,width-mm` 和 `sprd,height-mm` 的节点 3. 修改值为目标物理尺寸(单位:毫米): ```diff &lcd_panel { - sprd,width-mm = <68>; - sprd,height-mm = <121>; + sprd,width-mm = <64>; // 修改宽度 + sprd,height-mm = <115>; // 修改高度 }; ``` 4. **计算建议**: - 5.46 英寸屏幕对角线 ≈ 138.68 毫米 - 根据宽高比计算宽高(如 16:9): $$ \begin{align*} W &= \frac{16}{\sqrt{16^2+9^2}} \times 138.68 \approx 64.0\text{mm} \\ H &= \frac{9}{\sqrt{16^2+9^2}} \times 138.68 \approx 36.0\text{mm} \end{align*} $$ ### 3. **重新编译内核** ```bash # 进入内核源码目录 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- your_device_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs ``` 生成的 `.dtb` 文件将包含新屏幕尺寸参数。 ### 4. **更新设备固件** 1. 将新编译的 `.dtb` 文件刷入设备的 boot 分区: ```bash adb reboot bootloader fastboot flash boot new_boot.img ``` 2. 或通过 recovery 刷入包含新 dtb 的完整固件包 ### 5. **验证修改** ```bash # 查看内核日志确认参数加载 adb shell dmesg | grep -i "lcd_panel" # 检查系统报告的实际尺寸 adb shell dumpsys display | grep Physical ``` ### 注意事项 1. **参数依赖**: - 这些参数通常与 `sprd,resolution`(如 `<720 1520>`)配合使用 - 系统根据宽高和分辨率计算 DPI:$\text{DPI} = \frac{\sqrt{W_{px}^2 + H_{px}^2}}{\text{对角线英寸}}$ 2. **平台差异**: - Spreadtrum 平台:参数在 `lcd_panel` 节点 - Qualcomm 平台:查找 `qcom,mdss-dsi-panel-width-mm` 等参数 - MTK 平台:查找 `mediatek,panel-size-mm` 3. **兼容性处理**: - 在显示驱动中可能需要同步修改: ```c // drivers/gpu/drm/panel/panel-sprd.c static const struct drm_display_mode default_mode = { .width_mm = 64, // 与dts保持一致 .height_mm = 115, }; ``` > **重要提示**:修改设备树属于底层开发,需要完整的 AOSP 编译环境、内核源码和设备解锁权限。错误修改可能导致显示异常或无法启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值