使用Python-Flask框架开发Web网站系列课程(一)构建项目

版权声明:如需转载,请注明转载地址。 https://blog.csdn.net/oJohnny123/article/details/81907475

前言


使用IDE:PyCharm

操作系统: Mac

Python版本:3.6

我的邮箱:51263921@qq.com

交流群: 372430835

请注意,既然要学习开发,那么要注意以下几个问题。

1、开发语言版本不一样,尤其是Python,会导致同一段代码压根跑不起来的情况。所以请保证版本一致。

2、操作系统不一样,自然也会有区分,但是Mac环境和Linux环境基本还是比较相近,贴合生产,所以使用Mac作为演示环境。但与Window的差别也不会很大。

3、简易使用一样的IDE工具,但是不强求。

4、本课代码的github地址在页面最底。

 

构建项目


一、创建虚拟环境venv

1、从前我很皮,不喜欢创建这东西,都是直接用系统环境的Python,后来项目一多,呵呵哒,这个项目用的Django1.9,那个项目又用Django2.0。得,乱套了。所以,请养成良好的习惯,使用venv大人。

2、通过PyCharm添加虚拟环境venv ,Windows在File->Settings,Mac在PyCharm->Preferences,  打开页面后,按下图配置。Add local Python Interpreter。最后 Apply -> OK。

 

 二、安装flask

2.1 看下图,在Terminal控件里面执行 pip install flask==1.0.2  。

2.2 然后我们将这个阶段的依赖包记录下来,使用的命令为:    pip freeze>requirement.txt 

 2.3  我们开始构建目录结构

我们需要一个目录放前端的代码(frontend),一个放后端代码(backend),一个放公共方法代码(utils),一个放配置文件(config)。

我们在根目录myproject里面右键New->Python Package,用这个创建包。按上面括号里面的名字建。

2.4  构建后端代码

 2.4.1 添加config.py,在/myproject/config下。

这东西就是我们网站以后所有配置存放的地方啦,其中Config放的是各个环境都一致的配置,ProdConfig放的是生产环境的配置,SitConfig存放SIT环境配置,其他类比。

最后的一行,代表config = SitConfig() 当前获取的是SIT环境的配置。

全路径为:/myproject/config/config.py

内容如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Created by liaoyangyang1 on 2017/11/8.
"""
import osBASE_DIR = os.path.dirname(os.path.abspath(__file__))class Config(object):"""Base config class."""# 版本VERSION = 'beta 0.1'# 项目名称PROJECTNAME = 'myproject'# 端口PORT = 10101SECRET_KEY = '1234567890!@#$%^&*()'class ProdConfig(Config):"""Production config class."""# 是否开启调试DEBUG = False# 主机ip地址HOST = '0.0.0.0'class SitConfig(Config):"""Development config class."""# Open the DEBUG# 是否开启调试DEBUG = True# 主机ip地址HOST = '127.0.0.1'class DevConfig(Config):pass# Default using Config settings, you can write if/else for different env
config = SitConfig()

2.4.2 修改/myproject/backend/__init__.py

这个是未来整个后端的入口文件,具体内容如下:

全路径:/myproject/backend/__init__.py

具体代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Created by liaoyangyang1 on 2018/8/21 下午2:41.
"""from flask import Flask
from config.config import configdef create_app():#初始化项目实例app = Flask(__name__)app.secret_key = app.config['SECRET_KEY']#导入配置项app.config.from_object(config)# 钩子 在请求执行之前@app.before_requestdef before_request():print('hi')return app

 

2.4.3 在根目录添加后端项目管理文件  manage.py

要先补一个模块   pip install Flask-Script==2.0.6

添加一个空的python脚本,manage.py

全路径:/myproject/manage.py

内容如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Created by liaoyangyang1 on 2018/8/21 下午3:40.
"""
from flask_script import Manager, Server
from backend import create_appapp = create_app()app.debug = app.config["DEBUG"]
# 获取根目录config.py的配置项
host = app.config["HOST"]
port = app.config["PORT"]# Init manager object via app object
manager = Manager(app)# Create a new commands: server
# This command will be run the Flask development_env server
manager.add_command("runserver", Server(host=host,port=port,threaded=True))@manager.shell
def make_shell_context():"""Create a python CLI.return: Default import objecttype: `Dict`"""# 确保有导入 Flask app object,否则启动的 CLI 上下文中仍然没有 app 对象return dict(app=app)if __name__ == '__main__':manager.run()

2.4.4 添加视图文件,views.py

我们访问一个链接,要显示或者返回什么东西,就是在这里处理后返回给浏览器或者接口的。

全路径:/myproject/backend/views.py

内容如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Created by liaoyangyang1 on 2018/8/21 下午3:51.
"""
from flask import Blueprint,jsonify#账户的蓝图  访问http://host:port/account 这个链接的子链接,都会跳到这里
account = Blueprint('/account', __name__)# 访问http://host:port/account/test 这个链接,就会跳到这里
@account.route('/test')
#上面的链接,绑定的就是这个方法,我们给浏览器或者接口请求 一个json格式的返回
def test():return jsonify({'code':0,'content':'hi flask'})

2.4.5 添加路由文件,urls.py

全路径:/myproject/backend/urls.py

内容为:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Created by liaoyangyang1 on 2018/8/21 下午3:50.
"""from backend.views import account# 蓝图注册
def register(app):app.register_blueprint(account, url_prefix='/account', strict_slashes=False)

2.4.6 最后一步,添加内容到入口文件__init__.py

我们添加了两行代码

from backend.urls import register
register(app)

用来干啥的呢,是要把我们路由蓝图的对应关系注册到我们的 flask实例里面。和我们之前把配置文件注册到app.config里面是一个道理。

路径:/myproject/backend/__init__.py

内容如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Created by liaoyangyang1 on 2018/8/21 下午2:41.
"""from flask import Flask
from config.config import config
from backend.urls import registerdef create_app():#初始化项目实例app = Flask(__name__)app.secret_key = app.config['SECRET_KEY']#导入配置项app.config.from_object(config)# 注册路由register(app)# 钩子 在请求执行之前@app.before_requestdef before_request():print('hi')return app

三、启动项目

3.1  点击根目录的manage.py,右键执行

执行方式如图1,然后我们会发现还是缺了参数,请看图2、图3,通过edit configurations,在弹出框中的 Parameters 里面输入runserver。Apply后OK。

现在再次点击根目录的manage.py,右键执行。

 * Serving Flask app "backend" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:10101/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 110-176-230
 

现在,我们在浏览器输入  http://127.0.0.1:10101/account/test

 

图1:

图2

图3

 

四、GITHUB地址

https://github.com/lyy8510a/myproject/releases/tag/v1

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql varchar 字节长度

1.我们经常 mysql创建 varchar(20) name这个 20长度 究竟是表示的字符数还是字节数?根编码字符集又有没有关系? 首先 mysql 5.X 以上的版本的 定义中 表示的字符长度,如上varchar(20)你既可以添加20个英文字符&#x…

网上订餐python_来自美国网上订餐网站的创新

美国网上订餐网站的创新:小服务半径产生大价值来源:站长网 作者:扬扬做为一个上班族,尤其是从事it行业的白领阶层,整日对着电脑键盘敲敲打打,讲究的是效率,而每天中午乃至晚上考虑吃些什么却是让人极其头疼的事。去哪里…

PHP学习方向-进阶2(三)

实践篇 给定二维数组,根据某个字段排序如何判断上传文件类型,如:仅允许 jpg 上传不使用临时变量交换两个变量的值 $a1; $b2; > $a2; $b1; strtoupper 在转换中文时存在乱码,你如何解决?php echo strtoupper(ab你好c…

Spring的@Autowired和@Resource

Autowired 当Spring发现Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。 必须确保该类型在IOC容器中只有一个对象;否则报错。 Resource1、Resource后面没有任何内…

关于xml文件 xsi:schemaLocation

原文连接&#xff1a;https://www.jianshu.com/p/7f4cbcd9f09f ------------------------------------------------------相信很多人对xml 头上一大堆得东西都是拿来主义&#xff0c;copy过来就行了&#xff0c;并不理解那是什么意思先来一段<?xml version"1.0" …

ES6部分特性小结

前言 踩着前人的肩膀&#xff0c;努力前行。参考了很多前人的文章。 1.变量声明const和let es6之前声明变量只能用var&#xff0c;var的特点是无论声明在何处&#xff0c;都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部) function test(){if(false){var name …

java 顺序栈_Java实现顺序栈

一、分析栈是限定仅在表的一端进行插入或删除操作的线性表&#xff0c;对于栈来说&#xff0c;操作端称为栈顶&#xff0c;另一端则称为栈底&#xff0c;栈的修改是按照后进先出的原则进行的&#xff0c;因此又称为后进先出的线性表。顺序栈是指利用顺序存储结构实现的栈&#…

Spring IO platform

什么是Spring IO PlatformSpring IO Platform&#xff0c;简单的可以认为是一个依赖维护平台&#xff0c;该平台将相关依赖汇聚到一起&#xff0c;针对每个依赖&#xff0c;都提供了一个版本号&#xff0c;这些版本对应的依赖都是经过测试的&#xff0c;可以保证一起正常使用。…

二十多岁不信,三十多岁却深信不疑的道理

1.那些年偷的懒、荒废的时间、败坏的身体&#xff0c;都&#xff01;得&#xff01;还&#xff01; 年轻的时候心比天高&#xff0c;以为自己能干出一番大事业&#xff0c;后来慢慢意识到自己只是个普通人。 2.不和讲道理。 3.原来被嗤之以鼻的门当户对是有一定道理的。 4.以貌…

javascript === 和==的区别

原文链接&#xff1a;https://blog.csdn.net/seven_amber/article/details/62889290 -------------------------------------------------------------------- 用于比较 判断 两者相等 在比较的时候可以转自动换数据类型用于严格比较 判断两者严格相等 严格比较…

authentication java_HTTP基本认证(Basic Authentication)的JAVA实例代码

大家在登录网站的时候&#xff0c;大部分时候是通过一个表单提交登录信息。但是有时候浏览器会弹出一个登录验证的对话框&#xff0c;如下图&#xff0c;这就是使用HTTP基本认证。下面来看看一看这个认证的工作过程:第一步:客户端发送http request 给服务器,服务器验证该用户是…

Python数据分析入门(四)

前言上期给大家分享了关于豆瓣5500部电视剧的分析&#xff0c;那么这次我们就给吃货们带来一些福利&#xff0c;此次我们的主题为“寻找最好吃的火锅”。进入主题之前&#xff0c;先给所有的吃货们带来一桌美味的火锅&#xff0c;作为各位看官的前菜。数据采集此次我们采集的是…

微信开发者工具下载

https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

java continue goto_Java中goto和break、continue实现区别

goto 关键字很早就在程序设计语言中出现。事实上&#xff0c;goto 是汇编语言的程序控制结构的始祖&#xff1a;“若条件 A&#xff0c;则跳到这里&#xff1b;否则跳到那里”。若阅读由几乎所有编译器生成的汇编代码&#xff0c;就会发现程序控制里包含了许多跳转。然而&#…

Linux VirtualBox安装及使用指南

2019独角兽企业重金招聘Python工程师标准>>> VirtualBox是一款虚拟机软件。虽然它的功能并不及VMware Workstation Pro&#xff0c;但它对开源精神的坚持使得它在Linux中依然深受欢迎。 唯一难以令人接受的是&#xff0c;VirtualBox的安装步骤较为复杂。不过&#x…

java web vm_java web .vm文件??

在JavaWeb项目中有很多.vm文件&#xff0c;打开以后是类似于.NETMVC项目中的.cshtml文件的形式#if($linkList)#set($itemsOnLine0)#foreach($linkin...在Java Web项目中有很多.vm文件&#xff0c;打开以后是类似于.NET MVC项目中的.cshtml文件的形式#if($linkList)#set ($items…

Android studio gradle 无法获取 pom文件

Android studio 3.1 导入app项目后&#xff0c;gradle无法获取 pom文件 具体保存内容如下&#xff1a; Could not GET https://dl.google.com/dl/android/maven2/com/android/tools/build/transform-api/2.0.0-deprecated-use-gradle-api/transform-api-2.0.0-deprecated-use-g…

生产环境linux下安装两个及两个以上tomcat实践

前言: 在生产环境部署程序项目中&#xff0c;有时候由于服务器紧张或缺少服务器等原因,往往都需要安装两个及两个以上tomcat。我们需要在/etc/profile中增加tomcat的环境变量&#xff0c;然后在新增加的tomcat的bin目录下的catalina.sh中引用自己在/etc/profile中配置的环境变量…

java 内存 四_java最终化的内存保留问题(4)

四、一种代替最终化的选择在前面一节中的示例还存在一种不确定性可能&#xff1a;JVM并不能保证它在最终化队列中调用对象的终结器的顺序。而来自于所有类(应用程序&#xff0c;库&#xff0c;等等)的终结器都是被同等对待的。因此&#xff0c;一个占有大量内存或一种稀有的本地…

基于Spring Boot不同的环境使用不同的配置方法

原文路径&#xff1a;http://www.jb51.net/article/132589.htm ---------------------------------------- 默认是profile为dev&#xff0c;可以修改 spring 多文件配置&#xff1a; 1、properties文件 2、YAML文件 一、properties文件 在 Spring Boot 中&#xff0c; 多环境配…