前言

第一次给人写后端,感觉思路和想法都just so so,大方面是没有什么太大的难点,可是一旦跟前端对接,就出现了很多自己学习时遇不到的bug。

辛亏我是一个十分粗心的人,踩了很多大家都意想不到的坑,鞠躬尽瘁,死而后已,我就把我的第一次开发经验分享一下,让工作室或其他地方的后辈少走弯路,实在是见笑了。

*** 友情提醒,会python只是一个程序员必备的技能,python用来写后端的效率实在是不如go语言,并且轮子数量远远不如Java语言,建议那些真的想从事后端开发的同学早日跑路,qqqxx ***

flask框架怎么用我就不说了,我只讨论一些小细节。

上线前的准备

十分建议先学会使用docker

正儿八经的后端开发,肯定要用到正儿八经的数据库的,而正儿八经的数据库,肯定要用的正儿八经的数据。可是每一次通过脚本上传数据也是挺麻烦,而且在云服务器上,环境多多少少有点差异,有可能你一个下午都在忙活怎么配环境,换服务器时更要重新如此,使用docker容器打包,到时候服务器上只需要跑一个docker服务就可以上线,十分的convenient!

写代码前,跟前端沟通下数据格式

一般都是为这种

1
{"code":200,"data":data,"message":"success"}

状态码+数据+反馈信息

这个很重要!!!!

写代码时有多潇洒,改代码时就有多狼狈

并且跟前端交代好各种情况的状态码

服务器购买方面

本人一开始是在春节买的腾讯云服务器上线的,一开始接口没有上域名的时候,的确很爽很快,腾讯云的镜像自带python3.8,很多必备的软件都具备了,系统也是latest version,甚至安装包的镜像服务器都贴心的换成了国内的了,唯一能够诟病的也就它不能使用GitHub。

等到你上域名,上ssl证书的时候,腾讯云会拒绝与cloudflare服务器连接,好像是因为我没有备案啥的,或者我的配置也可能有点毛病。不过cloudflare是真的方便,ssl证书根本不需要申请,一键生成就能用,相比之下,腾讯云复杂的控制台真的是让我眼花缭乱。不得不说,外国人做的东西真的是又快又方便。

所以说我建议请购买国外的vps,并且使用cloudflare来代理域名

cloudflare的官网

不用担心这样做网站会被墙,目前只是黑名单屏蔽境外ip或者域名,我们良民做的网站当然也是大大的良民。

不会翻墙?

那请用一键脚本,直接复制到你的国外vps上就行,多的我就不说了,问问你的学长,朋友。

1
2
3
4
5
6
7
V2Ray一键安装代码:

bash <(curl -s -L https://git.io/v2ray.sh)

---------------------------------------------------------


上线后可能会遇到的bug

first 奇妙的跨域(知识涉及前端,可能会有些错误)

现在的浏览器为了安全,会屏蔽非接口的其他链接,怎么确定接口是自己的捏

主要是通过前端编写的拦截器

拦截器会检查状态码,响应头(比如Access-Control-Allow-Origin),如果不合乎规定,就禁止接口被使用

QQ图片20220306222026

状态码问题很好解决,问题往往出在别的地方

对于一个小白,第一步一定要装上跨域组件(flask的跨域组件为FLASK_cors),装上组件后还没有完

如果你的接口没有其他奇奇怪怪的请求头,只需要在返回的响应头加上

1
res.headers['Access-Control-Allow-Origin'] = 对方的完整 url/"*"

如果此请求还包含其他的非默认响应头,那么请在响应上再加上一条响应头(Access-Control-Allow-Headers),使得您对客户端的响应能够通过预检。

eg

1
res.headers["Access-Control-Allow-Headers"]="Authorization"

目前我遇到的跨域问题就是这些,以后再遇到的话还会更新的。

上域名和证书时遇到的事情

**我使用的dns解析由cloudflare提供(再三强调),如果您不会翻墙的话请不要往下读 **

使用nginx转发请求

由于域名一般只能绑定ip地址,所以直接访问域名的话会默认请求到80端口(https是443端口),所以说必须使用nginx转发请求到你的后端程序端口。

下面我将给出我的设置文件,仅作参考,关于怎么配置的问题就不一一赘述了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
upstream app_weapp {
server localhost:5000;
keepalive 8;
}
server {
listen 80;
#=====需要修改=========替换成自己的域名
server_name yoursurl;
#服务器自动把 HTTP 的请求重定向到 HTTPS
rewrite ^(.*)$ https://$server_name$1 permanent;
}

server {
listen 443 ssl;
#=====需要修改=========替换成自己的域名
server_name yoursurl;
#=====需要修改=========下面两行替换成自己SSL文件的路径
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://app_weapp;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

证书设置

cloudflare能免费生成15年有效期的证书

image-20220306221318899

另外,请将SSL/TLS 加密模式设置为完全(严格)

不然会发生重定向错误

目前想到的就这些了

To be continued