服务端 from flask import Flask, request app = Flask(__name__) @app.route("/") def index(): pass def login(user): if request.method=="get": return f"Hello {user}" app.add_url_rule("/login/", view_func=login,methods=['POST', 'GET']) if __name__ == "__main__": app.run(debug=True) 客户端请求 url = ' http://*******/login/yyy' res = requests.get(url=url,headers=headers) 请求报错如下 TypeError: The view function for 'login' did not return a valid response. The function either returned None or ended without a return statement.
应届生毕业就要工作了 想要精通一个框架 特地来询问一下是搞前后端分离的还是不分离的?哪一个比较符合当前的找工作趋势,python行业
我正在写一个微信小程序,使用flask作为后端,ide使用pycharm社区版,目前完成了登录功能并在微信开发者工具模拟器中实现了该功能,但在进行真机调试时出现了问题 在连接同一个wifi的情况下,在真机调试过程中当我发送一个request时,对应的login函数并没有执行,也没有发送response和错误信息!"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/6a20be2d3b5060b4939ce9b5f2f851d6.png) 我在使用模拟器发送post请求时(本机测试,ip地址192.168.0.107),可以得到回应(这里面的1代表login函数的内容被成功执行)"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/9d41c5ced7c5294b3a0c772e6fb77ff9.png) 在使用真机测试时发送相同post请求(ip地址192.168.0.102),得不到回应和报错"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/50d868e36acdb5e1ed5d64755c3b1c58.png) 这是app.run的内容"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/53c54ea15273196c35a7e22242fb89fe.png) 这是开启后的内容"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/b726666bc8b6cd330af21845fd6c38ca.png) 这是因为请求ip不是本机ip,所以没有响应吗?麻烦各位大佬了
简单来说 controller service dao 三层。 controller 和 service 之间的分层相对比较清晰, 业务逻辑和显示逻辑的拆分, 譬如 MQ/http/RPC 和业务分离。 service 和 dao 的区分我有点搞不懂。主要是因为分不清什么是存储逻辑(非业务逻辑)什么是业务逻辑。 尤其是加入了 manager 层之后。 因为是 python 后端, 所以很自然的将业务逻辑加到 Model 上。 (我理解这里的 Model 是指业务 Model ) UserModel.is_super() 带业务的查询。 或者 UserModel.objects.all() 原生将 permissons,groups ,Commany,等等一起都带过来了。 或者 UserModel.* 做一些跨表的操作。 我的问题: 什么是业务逻辑, 什么是非业务逻辑。 我的理解是,客户看不到的逻辑都算非业务逻辑, 譬如 1.1 表结构,表关联关系等。 UserManager.delete()和DepartmentManager.delete() 这俩可以同时包含删除关联关系表( UserDeptModel )的能力。不是二取一。 同理 save 也是。 如果没有 manager 层, 那么我的理解 Dao 是可以做连/跨表操作的,只要这个跨表操作和业务无关,没必要在 service 调用两次 dao 。 class UserManager: def delete(): UserDao.delete() UserDeptDao.delete() class DepartmentManager: def delete(): DepartmentDao.delete() UserDeptDao.delete() 1.2 密码加盐。 用户最多只需要知道你的密码是不明文保存就可以了。 加盐动作可以放在 DAO/Manager 层处理。 class UserDao: def make_password(passwd): return salt(passwd) def save(): passwd = self.make_password(passwd) self.passwd = passwd super.save() 1.3 DAO 层的方法命名和设定 是否可以类似get_super_user 这种带有非业务逻辑(假设这个 super 与业务逻辑无关),但是具有明显语义的方法名?还是只能get_user_by_type("super") 1.4 http 请求也可以封装层 dao. 譬如后端有一些依赖(另一个 team 提供支持), 我可以将这些依赖封装成 dao, 而不是 service. 2. 在 django/flask 中, 很容易实现 django filter 的功能。 "https://www.django-rest-framework.org/api-guide/filtering/" (https://link.segmentfault.com/?enc=X0pej2n6%2B07W%2Bj1%2Bat2HMg%3D%3D.bMicKZDGl%2FrW4DWF0xgS3MT%2BjcR8z8i0J3qwrLUi5jEwgt3UxZFujVh95%2BI3xq01K%2FwVRBQg3KJS9d8Q%2Bzl1kA%3D%3D) "https://django-filter.readthedocs.io/en/stable/" (https://link.segmentfault.com/?enc=oda25x8zP6cLtHDUWesc%2Fw%3D%3D.eH6V3DqH9B1rS81vsvK15TxKITZdYqAWiFlNxr5Bbbh4jVQLO8qGgCr0AyDqO%2BAp) 甚至于在 ModelViewSet 中直接集成了 filter, "https://github.com/encode/django-rest-framework/blob/master/rest_framework/mixins.py#L33" (https://link.segmentfault.com/?enc=MFjxnlbo8zXtHbLL%2FRRJEQ%3D%3D.hM6HTcdrkH7gub%2BofJJNBt0TQMc8BPwYhrNFTNkufSkYmkI3TCN6HvLfAjiEOjWIInQU%2BxkTy2FKKkXYoCjGXVLozE%2F%2BZo6cjLZ7Il0R1Pz0rntEjzhPgOthhSRlEjNw) 如果用 python 做三层架构且想实现类似 django filter 功能的话, 那么 DAO 中一定需要传入 request 参数。且层层穿透。在没有 spring 这种自动注入框架的帮助下,如何处理类似的问题? java 中是如何实现类似 django filter 类似功能的? 3. 什么是数据实体? 是否 controller service dao 是一一对应的,如果不是, 能否举几个例子。 主要是 DAO 和 service. 三层架构和 DDD 的优缺点建议不再本贴讨论。担心歪楼。 谢谢大家啦!
flasky学习过程中,有关分页的那部分使用url_for生成url的问题 假设查看的用户是haha 1.在用户头像创建的url 生成的url是 "http://xxx/user/haha" (https://link.segmentfault.com/?enc=R9Q%2FI%2FbixltxeTawPHRKJw%3D%3D.m5RxHnpWLe3ZPDPb5XuSZtmdkRlwdh83EJ%2BGZvQbRPw%3D) 2.在下边分页创建导航栏的url # 路由 @main.route('/followed_by/') def followed_by(username): user = User.query.filter_by(username=username).first() if user is None: flash('Invalid user.') return redirect(url_for('.index')) page = request.args.get('page', 1, type=int) pagination = user.followed.paginate( page=page, per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) follows = [{'user': item.followed, 'timestamp': item.timestamp} for item in pagination.items] return render_template('followers.html', user=user, title="Followed by", endpoint='.followed_by', pagination=pagination, follows=follows) 定义的宏 {% macro pagination_widget(pagination, endpoint) %} ... {{ p }} 模板调用宏 {{ macros.pagination_widget(pagination, endpoint, username = user.username) }} 为什么生成的url是 "http://xxx/followers_by/haha?page=1" (https://link.segmentfault.com/?enc=zIx0hwxCmqdD6NcEWfrWFA%3D%3D.iKHuE6l%2B1CzVyUWaLFR9ODzBadH2pyLfwJva1WwkRRGipixJb%2Bn2%2BEM4kLOWgGRm) 而不是是"http://xxx/followers_by/?page=1&username=haha" (https://link.segmentfault.com/?enc=cXmlOoo4tpWHVYE7oGKkrQ%3D%3D.%2Bgk5lq0PlqK5gJLoaS2sivI2jOaJoEdEAySIwYexemUFr9UksO3Abpk6Wo7TvJ5d) 希望老师讲解。
python小白,今天按课本上的实例写了如下代码,运行后一直报错:AttributeError: 'NameForm' object has no attribute 'validate_on_submite' ,上网查之后说是可能导入了两个Form,导致后面的Form覆盖前面导入的Form,我仔细地核对了一遍,并没有发现这个问题,已经校对了一下午,仍不能运行,通过自查也不能解决,现向各位大佬求助。另外,我的VScode不能识别validate_on_submite,也不知道什么原因,截图如下: from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired from flask import Flask, render_template, session, redirect,url_for # from collections.abc import Sequence # import _collections_abc # from typing import Any, Mapping app=Flask(__name__) app.config["SECRET_KEY"] = "123456" class NameForm(FlaskForm): name = StringField('What is your name?', validators=[DataRequired()]) submit = SubmitField('Submit') @app.route("/",methods=["GET", "POST"]) def index(): name=None form = NameForm() if form.validate_on_submite(): name = form.name.data form.name.data = '' return render_template('index1.html', form=form, name=name) # old_name=session.get("name") # if old_name is not None and old_name !=form.name.date: # flash("看看你输入的什么") # session["name"] = form_name_data # return redirect(url_for("index")) # return render_template("index1.html",form = form, name = session.get("name")) if __name__=="__main__": app.run(debug=True) https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240927/82b08e28ee6738b6ea7b3fc01dcc1058.png 求助各位大佬
当我使用 Flask 结合 uWSGI 在服务器上以 HTTP 模式启动部署时,如果我通过科学上网访问服务器的公网 IP 加上端口,我可能会遇到网络阻断和高延迟的问题,导致无法正常访问。然而,当我关闭科学上网并使用服务器的真实 IP 地址时,访问就正常了。另外一种解决方法是使用 Nginx 反向代理端口,这样就不会受到科学上网的影响。不清楚这种方法的原理是什么。
比如 "Flask" 里的 "g" 对象,比如存储一些用户身份信息以便其它方法去使用
flask如何读取mysql数据库中的图片,并返回给前端呢? "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/99ec353938722995d00dd639197f0ade.png) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/54cc53b440e5c57efd6313fb9687ecc0.png) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/692d9f940b740b8288870a83db3b9725.png) 得到提供的思路 前端该如何请求 还有服务器需要怎么样返回