个人技术博客——linux服务器配置以及flask框架
本次的软件工程实践,我负责我们组后台服务的搭建,我选用了bandwagon的服务器,安装的是Debian GNU/Linux,全程在root用户下操作,后端服务是用python的flask框架,数据库用的是postgres,内容会慢慢都添加上去。
本地登录远程服务器
在本地登录远程服务器现在主要用的是SSH。
Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定;SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。
Windows上的SSH工具有PuTTY,SecureCRT和Xshell等,我选用的是Xshell。一般服务器的提供商都会把初始的ssh端口和root密码告诉你,你就可以用SSH登录服务器了。
打开Xshell,点击会话左上角的新建。

在主机框里写上服务器的ip地址,端口号写SSH的端口号,

点击用户身份验证,填写用户名和密码,用户名写root,密码写初始的root密码(也可以用自己创建的用户登录)。

点击确定,然后连接,成功后如下图。

接下来就可以用Linux的各种命令操作服务器了。
flask框架
Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎。Flask使用BSD授权。flask被称为microframework,因为它只需要几十行代码就能写出一个web应用。以“Hello World”为例子。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
运行之后:


这段代码做了五件事:
1.首先,我们导入了 Flask 类。这个类的实例将会是我们的 WSGI 应用程序。
2.接下来,我们创建一个该类的实例,第一个参数是应用模块或者包的名称。 如果你使用单一的模块(如本例),你应该使用 name ,因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同( 也即是 'main' 或实际的导入名)。这是必须的,这样 Flask 才知道到哪去找模板、静态文件等等。详情见 Flask 的文档。
3.然后,我们使用 route() 装饰器告诉 Flask 什么样的URL 能触发我们的函数。
4.这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息。
5.最后我们用 run() 函数来让应用运行在本地服务器上。 其中 if name == 'main': 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。
这就是一个最简单的flask应用,其他东西都可以在它上面扩展。
下面就以课堂作业通讯录为例子讲一下。
在这个例子里我写了七个接口,我就挑两个个讲一下
渲染主html。flask可以通过render_template,直接把同目录的templates文件里的html文件渲染出来。
@application.route('/student')
def index():
return render_template('student.html')
添加信息。url设置为'/add',请求方式为POST,由于使用的是sqlite3数据库,所以要import sqlite3,用con连接数据库,cursor设置游标,然后读取request的data,也就是发过来请求body的数据,再将数据插入表中,如果成功返回键finished的值为true,失败为false。
@application.route('/add', methods = ['POST']) # 添加学生信息
def add_stu():
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
data = request.get_data()
data = data.decode("utf-8")
dict = json.loads(data)
values = (dict['name'],dict['address'],dict['phone'],dict['wechat'],
dict['mail'],dict['qq'],dict['note']) # 接受前端发送的信息
print(values)
try:
cursor.execute('''insert into student(name,address,phone,wechat,mail,qq,note)
values(?,?,?,?,?,?,?)''',values)
cursor.close()
conn.commit()
conn.close()
return jsonify({'finished': 'true'})
except:
cursor.close()
conn.commit()
conn.close()
print("Error: unable to insert data")
return jsonify({'finished': 'false'}
光有一个python文件是不足以运行程序的,即使运行了速度也很慢,所以需要把它挂在服务器软件上,flask应用经常用gunicorn部署,用nginx来反向代理,这样的话接受请求速度就快多了,也更安全稳定。gunicorn可以用pip安装,而nginx也可用apt-get安装。
如果要用gunicorn启动服务需要在应用里这样写:
from flask_script import Manager
······
def create_app():
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
return app
application = create_app()
······
if __name__ == '__main__':
application.run()
在命令行里运行:
gunicorn -D(后台运行) -w 3(开三个进程) - b 127.0.0.1:5000(运行的地址和端口) app:application(配置文件名)
这样应用就运行起来了。
配置nginx就要复杂一点
装好之后命令:nginx -t

可以看到配置文件在/etc/nginx/nginx.conf,修改它,加入:
server{
listen 5001;
server_name 服务器地址;
location /{
proxy_pass http://127.0.0.1:5000;
}
}
配置完之后运行 nginx -t ,成功后再运行 service nginx restart ,然后就可以在服务器的5001端口访问到服务了。
参考:
https://zh.wikipedia.org/wiki/Flask
http://docs.jinkan.org/docs/flask/patterns/sqlalchemy.html
http://blog.csdn.net/qq_32198277/article/details/52432890
个人技术博客——linux服务器配置以及flask框架的更多相关文章
- 【技术博客】Django+uginx+uwsgi框架的服务器部署
1.登录服务器 使用ssh来直接登录到服务器terminal进行操作,推荐使用XShell和XFtp来进行远程登录和文件传输. 2.运行环境准备 本组获得的华为云服务器为ubuntu16.04版本,先 ...
- [福大软工] Z班——个人技术博客评分
个人技术博客 作业地址 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering2015/homework/1070 作业要求 个人技术博客单次作业 ...
- Linux前传——第一次写技术博客
准备写技术博客了.不过,真的没什么技术,以后就写写学习上面遇到的问题与想法吧.
- [转]有哪些值得关注的技术博客(Java篇)
有哪些值得关注的技术博客(Java篇) 大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...
- 最值得收藏的java技术博客(Java篇)
第一个:java_my_life 作者介绍:找不到原作者信息.大概做了翻阅全部是2012年的博客. 博客主要内容:主要内容是关于Java设计模式的一些讲解和学习笔记,在相信对学习设计模式的同学帮助很大 ...
- 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等
本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...
- 在Ubuntu14.04上安装WordPress4搭建技术博客
1.安装LAMP环境 1.1 安装Apache2 1.2 安装MySQL5 1.3 安装PHP5 1.4 安装phpMyAdmin 2.初始化数据库 3.下载并配置WordPress 4.配置Apac ...
- UC技术博客开放通知
国内知名浏览器UC开放技术博客( http://tech.uc.cn/),技术博客所涵盖技术点有: Hadoop Linux MySQL 前端与client技术 图像处理 开发语言和框架 数据存储 数 ...
- [技术博客] 自制 apt deb Repository
[技术博客] 自制 apt deb Repository (termux) 在修改整合遵循GPLv3的Android terminal app and Linux environment:termux ...
随机推荐
- Unity3D鼠标坐标转世界坐标和局部坐标
鼠标坐标转世界坐标和局部坐标: Vector3 MousePosition2Local () { mousePosition = Input.mousePosition; //获取屏幕坐标 mouse ...
- 动态生成二维码并利用canvas合成出一张图片(类似海报、分享页)
在前端开发并打算推广一个APP的时候,推广页是免不了的,而推广页的展示方式一般是给人家一个二维码,让别人自己去安装APP,这样前段任务也达到了,这次写这篇文章的原因主要还是总结一下,其中有很多不完善的 ...
- Debug技巧
多线程调试 有些时候为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下. 在IDE里断点停下来的时候,可以切换到另外的线程中,跑其他的代码,不会互相影响.这里是有 ...
- MongoDB比较两列大小 使用$subtract函数
是找出整个表 a大于b的总数量,要怎么操作数据库呢,那就要用到$subtract函数 MongoDB比较两列大小 使用$subtract函数, // MongoDB 比较两列大小求出 啊>b 的 ...
- 深入理解苹果系统(Unicode)字符串的排序方法
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由iminder发表于云+社区专栏 Unicode编码 我们知道计算机是不能直接处理文本的,而是和数字打交道.因此,为了表示文本,就建立 ...
- Java基础之循环语句、条件语句、switch case 语句
Java 循环结构 - for, while 及 do...while 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java中有三种主要的循环结构: whi ...
- 【转】repo介绍
Android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 Repo 命令行工具,对 Git 部分命令封装,将百多个 Git 库有效的进 ...
- USDT与omniCore钱包
USDTUSDT,又称为泰达币,是由Tether公司在 2015年推出的一种与美元锚定的加密货币,理论上,1USDT=1美元,这种价格的稳定性基于Tether公司声称对每一个发行的Tether在他们的 ...
- Java高级类特性(一)
一.继承性 1)继承的使用:权限修饰符 class A extends B{}:2)子类:A 父类(基类 SuperClass):B3)子类继承父类后,父类中声明的属性.方法,子类都可以获取到明确:当 ...
- Flask 中的 CBV 与上传文件
from flask import Flask, views, render_template, request app = Flask(__name__) app.config['DEBUG'] = ...