前端和后端
让我们按顺序开始。什么是前端和后端?该站点有两个方面:分别是正面和内部。第一个通常负责页面上对象的视觉排列(哪里有图片,哪里有文字以及哪里有按钮)。第二个负责“行动”。通常,这些是单击网站上相同的按钮或其他“事物”。例如,您转到自己喜欢的社交网络的页面,首先需要登录到您的帐户。在前端(前端)上,输入用户名和密码,然后单击“登录”按钮。此时,该请求将发送到数据库以检查该用户的存在,如果成功,您将被带到您帐户下的社交网络,否则,将看到错误消息。在这种情况下,后端基本上负责向数据库发送请求。它通常分为三个子部分:
- Web API,用于接受请求
- 处理请求的业务逻辑
- 与数据库的交互
在本文中,我们将主要讨论API或应用程序编程接口,而仅讨论业务逻辑。但是首先,让我们创建一个服务器。
创建自己的服务器
这就是使用flask框架时最简单的python服务器应用程序的样子:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, World!"
app.run()
已经有一个空路由(“ /”),如果您运行此应用程序并打开第127.0.0.1:5000页的浏览器,您将看到题词“ Hello,World!”。从服务器端,您将看到以下消息:
127.0.0.1--[07 / Aug / 2020 20:32:16]“ GET / HTTP / 1.1” 200-因此,通过转到浏览器(客户端)中的此链接,我们可以一个对我们服务器的GET请求,我们进入索引函数-从这里开始“ Hello,World!”。您可以沿着(或不一定)沿着其他路线添加其他查询(复杂得多)。正如我所说,在这种情况下,我们使用了GET请求-标准默认值。但是还有许多其他应用,其中最受欢迎的是POST,PUT,DELETE。但是为什么这是必要的呢?
创建读取更新删除
首先,REST代表代表状态转移(或更简单地说,代表代表状态转移)。实际上,REST本身的定义并不那么重要,但通常与另一个首字母缩写-CRUD-创建读取更新删除相关联。在开始的时候,我给出了一个与数据库有关的示例,这四个操作是使用它(或仅使用数据)不可或缺的一部分。
其次,REST或RESTfull API必须支持处理这四个动作。这是GET,POST,PUT,DELETE方法派上用场的地方。通常(不一定!)POST方法用于添加新数据(创建),GET(读取)(读取),PUT(用于更新现有数据)(更新)和DELETE(删除)(删除)。例如,可以如下重新设计同一烧瓶应用程序:
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["POST", "GET", "PUT", "DELETE"])
def index():
if request.method == "POST":
#
if request.method == "GET":
#
if request.method == "PUT":
#
if request.method == "DELETE":
#
app.run()
这是原始的REST API。前端端现在可以发送请求,并且根据它们的类型,我们将采取进一步的措施。
处理数据
我们当前的应用程序一点也不有趣-处理一些数据会很好。为此,您需要考虑如何转移它们。最受欢迎的方法是JSON格式(但是您可以使用其他格式,例如XML)。它类似于python中的字典,非常易于使用。我将使用原始数据作为示例在社交网络上进行授权:
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
到目前为止,我们有一个数据,其中有两个用户(login1和login2),我们将在此日期之前删除。应该说,这四个方法很少在同一路径上工作,通常这样做:对于GET方法(返回所有用户)和POST,使用该路由,例如“ / users”,对于GET方法(通过其ID),PUT和DELETE“ / users / id”。还应注意,要更新和创建新用户,我们将在请求正文(request.json)中接收有关他们的数据。现在我们的程序可以重写如下:
from flask import Flask, request
app = Flask(__name__)
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
@app.route("/users", methods=["POST", "GET"])
def work_with_users():
if request.method == "POST":
data[max(data.keys())+1] = request.json
return {"message": "User was created"}, 201
if request.method == "GET":
return data, 200
@app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"])
def work_with_user_by_id(user_id):
if request.method == "GET":
return data[user_id], 200
if request.method == "PUT":
data[user_id]["login"] = request.json["login"]
data[user_id]["password"] = request.json["password"]
return {"message": "User was updated"}, 200
if request.method == "DELETE":
data.pop(user_id)
return {"message": "User was deleted"}, 200
app.run()
有很多测试请求的程序(Postman,Fiddler,Insomnia等),我建议您熟悉其中之一(就个人而言,Postman是我的最爱)。在他们的帮助下,您可以查看请求的结果以及状态码(return'ah中的数字200/201)。您还可以通过将数据添加到请求正文中来分阶段发送数据。
还值得注意的是,目前尚不使用这种方法,通常使用flask-restplus库(或替换它的flask-restx),但是我认为首先您需要熟悉纯烧瓶。还必须检查数据的可用性及其正确性,并在相反情况下提供错误返回。
结论
REST API只是CRUD方法,站点的客户端可以通过特定的路径来访问它们。乍一看,这可能很难理解,因此我建议通过与该示例类似的方式编写自己的服务器。就个人而言,我发现烧瓶是最简单的框架之一,如果您是初学者,则建议您尝试一下。