# PythonFinalDesign **Repository Path**: lhlc67/python-final-design ## Basic Information - **Project Name**: PythonFinalDesign - **Description**: Python期末设计 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: Library - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-12-04 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 网站URL : http://47.92.173.239:5000/static/index.html#/book > 因为容联运云通讯手机短信服务需要消费才可上线,目前只可以给测试账号发送验证码 测试账号 : 13806370637 密码 : 123456 ## 部署运行问题 1. 关于报错 ModuleNotFoundError: No module named 'MySQLdb'的问题: https://www.cnblogs.com/iweining/articles/8283213.html https://www.cnblogs.com/zhenggaoxiong/p/10119298.html - pip install mysqlclient (Windows) - apt-get install python-mysqldb (Linux Ubuntu) 2. 依赖问题 - 导出扩展包 pip freeze > packages.txt - 在其他虚拟换环境安装 pip install -r packages.txt - 部署的时候会几个包 Windows 下的包报错, 直接删了就行 - 有几个包检测不到 : pip install marshmallow-sqlalchemy simplejson flask_marshmallow 3. Nginx + uwsgi + Flask 在 Ubuntu 下部署 https://blog.csdn.net/Yvettre/article/details/81053166 ## 学习笔记 1. 装饰器的使用,把类的函数变为类的属性 ```python # 加上property装饰器后,会把函数变为属性,属性名即为函数名 @property def password(self): """读取属性的函数行为""" # print(user.password) # 读取属性时被调用 # 函数的返回值会作为属性值 # return "xxxx" raise AttributeError("这个属性只能设置,不能读取") # 使用这个装饰器, 对应设置属性操作 @password.setter def password(self, value): """ 设置属性 user.passord = "xxxxx" :param value: 设置属性时的数据 value就是"xxxxx", 原始的明文密码 :return: """ self.password_hash = generate_password_hash(value) ``` 2. Python 装饰器书写习惯 ```python import functools def login_required(func): # 使用wraps装饰器,可以修复原函数的属性 @functools.wraps(func) def wrapper(*argc, **kwargs): pass return wrapper @login_required def itcast(): """ itcast python """ pass print(itcast.__name__) print(itcast.__doc__) ``` 3. Flask 数据库迁移指令 - python app.py db init 初次执行要执行这条语句 - python app.py db migrate -m "注释" 执行迁移指令 - python app.py db upgrade 更新表 4. 问题描述 : 从数据库中查询的数据转化为 json 格式发送到前端 刚开始一直没有找到合适的方法,比如在 model 对象中加入一个转为字典的成员函数 后来发现使用 Flask-Marshmallow 模块更方便 https://blog.csdn.net/stone0823/article/details/103945194 https://note.youdao.com/ynoteshare1/index.html?id=a408e467a7c4f6d82dd4e15a4a29487d&type=note Flask-Marshmallow官方文档 : https://flask-marshmallow.readthedocs.io/en/latest/ 5. 错误描述 : TypeError: Object of type Decimal is not JSON serializable 使用 Marshmallow 将数据库中数据转化为 json 对象时,有些值的数据类型为 Decimal 但是这种类型并不能转化为 json, 使用 simplejson 进行强制类型转化就行了,直接安装即可 在该虚拟环境中使用 pip install simplejson 安装 simplejson 这个包就可以永久解决这个问题 https://www.pythonheidong.com/blog/article/314714/6e463527844818356daa/ 6. 使用 JavaScript 的 Map 函数来遍历数组对象,减少代码量 https://blog.csdn.net/liminwang0311/article/details/86480829 7. 问题描述 : POST 请求访问接口 405 Method Not Allowed The method is not allowed for the requested URL. _一定要将在项目的__init__.py 里注册蓝图,不然无法访问_ 8. 问题描述 : 数据表中如果字段为空,则查询后结果为 None - None 9. 问题描述 : Vue 使用@click 点击函数的修饰符解决二级菜单中的路由跳转,函数失效问题 https://blog.csdn.net/weixin_41646716/article/details/90069562