本次的软件工程实践,我负责我们组后台服务的搭建,我选用了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框架的更多相关文章

  1. 【技术博客】Django+uginx+uwsgi框架的服务器部署

    1.登录服务器 使用ssh来直接登录到服务器terminal进行操作,推荐使用XShell和XFtp来进行远程登录和文件传输. 2.运行环境准备 本组获得的华为云服务器为ubuntu16.04版本,先 ...

  2. [福大软工] Z班——个人技术博客评分

    个人技术博客 作业地址 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering2015/homework/1070 作业要求 个人技术博客单次作业 ...

  3. Linux前传——第一次写技术博客

    准备写技术博客了.不过,真的没什么技术,以后就写写学习上面遇到的问题与想法吧.

  4. [转]有哪些值得关注的技术博客(Java篇)

    有哪些值得关注的技术博客(Java篇)   大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...

  5. 最值得收藏的java技术博客(Java篇)

    第一个:java_my_life 作者介绍:找不到原作者信息.大概做了翻阅全部是2012年的博客. 博客主要内容:主要内容是关于Java设计模式的一些讲解和学习笔记,在相信对学习设计模式的同学帮助很大 ...

  6. 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等

    本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...

  7. 在Ubuntu14.04上安装WordPress4搭建技术博客

    1.安装LAMP环境 1.1 安装Apache2 1.2 安装MySQL5 1.3 安装PHP5 1.4 安装phpMyAdmin 2.初始化数据库 3.下载并配置WordPress 4.配置Apac ...

  8. UC技术博客开放通知

    国内知名浏览器UC开放技术博客( http://tech.uc.cn/),技术博客所涵盖技术点有: Hadoop Linux MySQL 前端与client技术 图像处理 开发语言和框架 数据存储 数 ...

  9. [技术博客] 自制 apt deb Repository

    [技术博客] 自制 apt deb Repository (termux) 在修改整合遵循GPLv3的Android terminal app and Linux environment:termux ...

随机推荐

  1. Hashtable,HashMap,TreeMap有什么区别?Vector,ArrayList,LinkedList有什么区别?int和Integer有什么区别?

    接着上篇继续更新. /*请尊重作者劳动成果,转载请标明原文链接:*/ /*https://www.cnblogs.com/jpcflyer/p/10759447.html* / 题目一:Hashtab ...

  2. 查找第K小的数 BFPRT算法

    出处 http://blog.csdn.net/adong76/article/details/10071297 BFPRT算法是解决从n个数中选择第k大或第k小的数这个经典问题的著名算法,但很多人并 ...

  3. USB 驱动(监测鼠标左键的动作)

    (基于 Linux 3.4.2 内核) 可分为以下几个步骤来完成这个驱动: 1. 分配设置一个 usb_driver 结构体 2. 注册这个 usb_driver (如果设备的 id_table 与驱 ...

  4. 动态规划法(八)最大子数组问题(maximum subarray problem)

    问题简介   本文将介绍计算机算法中的经典问题--最大子数组问题(maximum subarray problem).所谓的最大子数组问题,指的是:给定一个数组A,寻找A的和最大的非空连续子数组.比如 ...

  5. Jquery的ID选择器

    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></scri ...

  6. [Linux] Linux Shell查找文件

    #!/bin/bash # 查找当前目录中所有大于1mb的文件,把文件名写到文本文件中,统计个数 # # find命令,参数:路径地址,命令参数,-size n (查找长度为n的文件) -type f ...

  7. 【Java并发编程】14、Thread,线程说明

    线程的状态:New.Runnable.Blocked.Waiting.Timed waiting.Terminated 1. RUNNABLE,对应"就绪"和"运行&qu ...

  8. 如何在表单中使用Ajax

    1.HTML就是一个简单表单验证,有登录按钮,点击登录会发送Ajax, 这里就是简单如果用户名为:zhouzhiruo,密码为:123456,就是登录成功,否则登录失败 应该在发送请求之前对input ...

  9. [Error] 未发现相关 less 编译器配置,请检查wepy.config.js文件

    此错误是由于缺少包引起的 npm install less -d 直接装包即可

  10. 【代码笔记】Web-ionic-表单和输入框

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...