个人技术博客——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 ...
随机推荐
- rhel 配置centos源
1.删除自带的yum包,清除/etc/yum.repos.d下面的文件 rpm -qa|grep yum|xargs rpm -e --nodeps(不检查依赖,直接删除rpm包) 2.安装cento ...
- java基础之继承(一)
虽然说java中的面向对象的概念不多,但是具体的细节还是值得大家学习研究,java中的继承实际上就是子类拥有父类所有的内容(除私有信息外),并对其进行扩展.下面是我的笔记,主要包含以下一些内容点: 构 ...
- Lucene实战之基于StandardAnalyzer读写索引
前言 使用lucene创建索引时如果指定了解析器,则需要读写都使用这个解析器,目前我发现也就是在处理中文这块比较麻烦,像你在使用solr时如果配置了ik分词,则需要把index清空重新创建才能继续搜索 ...
- Shiro学习总结(1)——Apache Shiro简介
1.1 简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比springSecurity,可能没有Spring Securit ...
- 移动端地区选择控件mobile-select-area
由于之前的[js开源组件开发]js手机联动选择地区仿ios 开源git 很受欢迎,于是我又对其进行了一些优化,包括可选的范围变大了,添加了默认空首地址的功能,也添加了更多api参数,首先我们先来看下这 ...
- c# txt代码转换成HTML格式
/// <summary> /// 字符串字符处理 /// </summary> /// <param name="chr">等待处理的字符串& ...
- Receiver 和 Direct方式的区别
Kafka direct 跟receiver 方式接收数据的区别? Receiver是使用Kafka的高层次Consumer API来实现的.Receiver从Kafka中获取的数据都是存储在Spar ...
- Swagger2限定接口范围
前面在使用Swagger2时遇到的坑中简单介绍了Swagger的使用. 不过默认情况下,Swagger2会把项目中的所有接口都展示在列表里,特别是你用了Springboot/SpringCloud之后 ...
- Apollo源码阅读笔记(一)
Apollo源码阅读笔记(一) 先来一张官方客户端设计图,方便我们了解客户端的整体思路. 我们在使用Apollo的时候,需要标记@EnableApolloConfig来告诉程序开启apollo配置,所 ...
- lfs(systemd版本)学习笔记-第2页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemd)学习笔记-第1页 的地址:https://www.cnblogs.com/renren-study-no ...