如何使用Python+Flask搭建本地Web站点并结合内网穿透公网访问?

news2024/11/14 21:58:56

文章目录

    • 前言
    • 1. 安装部署Flask并制作SayHello问答界面
    • 2. 安装Cpolar内网穿透
    • 3. 配置Flask的问答界面公网访问地址
    • 4. 公网远程访问Flask的问答界面

前言

Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务,本期教程我们使用Python Flask搭建一个web问答应用程序框架,并结合cpolar内网穿透工具将我们的应用程序发布到公共网络上,实现可多人远程进入到该web应用程序访问。

在操作上我们将使用HTML来创建网页的结构,然后使用css设计这个结构并且使其看起来更漂亮,此外还会利用Javascript与页面上的不同元素进行交互,最后使用python与web服务器(也成为后端)进行连接。

1. 安装部署Flask并制作SayHello问答界面

本篇文章代码使用 Python3 运行

安装环境:需要在电脑上安装 Python3 和 pip3。建议安装最新版本

检查是否有安装了pip的可用Python,查看Python和pip版本:

C:> py --version
Python 3.N.N
C:> py -m pip --version
pip X.Y.Z from ... (python 3.N.N)

使用pip安装和更新:

$ pip install -U Flask

创建环境:

conda create -n SAYHELLO python=3.10

激活环境:

conda activate SAYHELLO

创建项目目录:

mkdir SAYHELLO

进入到创建的目录:

cd SAYHELLO

在当前目录启动VS Code:

code .

SAYHELLO文件夹下新建两个附加文件夹,一个名为templates储存html文件的位置,

另一个名为static文件夹,下面新建一个名为css的文件夹。

css文件夹下新建一个名为main.css的文件,

body {
    text-align: center;
    background-color: SlateGrey;
}
p {
    color: white;
    font-family: Shanti;
    font-size: 1.2em;
    display: inline-block;
    margin:  20px;
}
img {
    margin: 60px 0 30px 0;
    width: 250px;
}
input {
  width: 300px;
  margin: 20px 20px;
  height: 50px;
  border: none;
  border-radius: 10px;
  font-family: Shanti;
  font-size: 1.3em;
  text-align: center;
}

input:focus {
    outline: none;
    border: solid 5px #00FFCE;
}

#greet {
    background-color: PaleVioletRed;
    border:  none;
    width:  200px;
    color: white;
}

#greet:hover {
    background-color: MediumVioletRed;
}

templates文件夹里新建一个名为index.html的文件,

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Say Hello</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
</head>
<body>
    <img src="https://images.cpolar.com/img/202311271456089.png">
    <br>
    <form action="greet" method="post">
        {% for message in get_flashed_messages() %}
             <p>{{ message }}</p>
         {% endfor %}
        <br>
        <input type="text" name="name_input">
        <br>
        <input type="submit" value="GREET" id="greet">
    </form>
</body>
</html>

SAYHELLO文件下新建一个名为Procfile的文件,

web: gunicorn app:app

SAYHELLO文件下新建一个名为app.py的文件,

from flask import Flask, render_template, request, flash

app = Flask(__name__)
app.secret_key = "manbearpig_MUDMAN888"

@app.route("/")
def index():
	flash("what's your name?")
	return render_template("index.html")

@app.route("/greet", methods=['POST', 'GET'])
def greeter():
	flash("Hi " + str(request.form['name_input']) + ", great to see you!")
	return render_template("index.html")

SAYHELLO文件下新建一个名为requirements.txt的文件,

certifi==2021.5.30
click==7.1.2
Flask==1.1.2
gunicorn==20.0.4
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==2.0.1
Werkzeug==1.0.1
wincertstore==0.2

在TERMINAL里启动Flask

flask run

image-20231127155003195

打开一个新的浏览器,输入http://127.0.0.1:5000,进入到刚才制作的SAY Hello的打招呼界面。

可以看到刚才创建的问题回答:what’s your name?

image-20231127155252049

点击GREET后,弹出:HI wang,greet to see you!

image-20231127155443924

这样我们使用Flask搭建的一个基本的带有问答形式的界面就搭建完成了,接下来我们要把这个问答界面发布到公网,分享给别人并且在web进行前端与后端的互动。

2. 安装Cpolar内网穿透

上面在本地成功部署了Flask,并局域网访问成功,下面我们安装Cpolar内网穿透工具,通过cpolar 转发本地端口映射的http公网地址,我们可以很容易实现远程访问,而无需自己注册域名购买云服务器.下面是安装步骤:

cpolar官网地址: https://www.cpolar.com

  • 使用一键脚本安装命令
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 向系统添加服务
sudo systemctl enable cpolar
  • 启动cpolar服务
sudo systemctl start cpolar

cpolar安装成功后,在外部浏览器上访问9200端口 即:【http://局域网ip:9200】,使用cpolar账号登录(如没有账号,可以点击下面免费注册),登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可

image-20230831171159175

3. 配置Flask的问答界面公网访问地址

点击左侧仪表盘的隧道管理——创建隧道,创建一个Flask的cpolar公网地址隧道:

  • 隧道名称:可自定义命名,注意不要与已有的隧道名称重复
  • 协议:选择http
  • 本地地址:5000 (局域网访问的端口)
  • 域名类型:免费选择随机域名
  • 地区:选择China Top
  • 点击创建

image-20231127160128962

隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网访问地址,有两种访问方式,一种是http 和https

image-20231127160236923

4. 公网远程访问Flask的问答界面

使用上面的cpolar https公网地址在任意设备的浏览器访问,即可成功看到Flask的web界面,这样一个公网地址且可以远程访问就创建好了,无需自己购买云服务器,即可发布到公网访问。

image-20231127160540688

由于以上使用cpolar所创建的隧道使用的是随机公网地址,24小时内会随机变化,不利于长期远程访问。

我一般会使用固定二级子域名,因为我希望将网址发送给别人进行问卷调查时候,就可以直接使用固定的公网地址进行填写了。它是一个固定、易记的公网地址(例如:SayHello.cpolar.cn)因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化【ps:cpolar.cn已备案】

注意需要将cpolar套餐升级至基础套餐或以上,且每个套餐对应的带宽不一样。【cpolar.cn已备案】

登录cpolar官网,点击左侧的预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称。

image-20231127160930144

保留成功后复制保留成功的二级子域名的名称

image-20231127160950732

返回登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑

image-20231127161016574

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名

点击更新(注意,点击一次更新即可,不需要重复提交)

image-20231127161143781

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了固定的二级子域名名称的域名

image-20231127161212877

最后,我们使用固定的公网地址访问,可以看到访问成功,这样一个固定且永久不变的公网地址就设置好了。

配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名

点击更新(注意,点击一次更新即可,不需要重复提交)

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了固定的二级子域名名称的域名

最后,我们使用固定的公网地址访问,可以看到访问成功,这样一个固定且永久不变的公网地址就设置好了。

image-20231127161237988

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

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

相关文章

【数论】【分类讨论】【C++算法】1611使整数变为 0 的最少操作次数

作者推荐 【动态规划】【字符串】【行程码】1531. 压缩字符串 涉及知识点 数论 数学 分类讨论 LeetCoce1611. 使整数变为 0 的最少操作次数 给你一个整数 n&#xff0c;你需要重复执行多次下述操作将其转换为 0 &#xff1a; 翻转 n 的二进制表示中最右侧位&#xff08;第…

多线程c++

目录 1.join和detach区别 2.lock_guard和unique_lock 3.原子操作 4.条件变量condition_variable 5.future 和 promise 1.join和detach区别 ①不使用join和detach #include <iostream> #include <thread> #include <windows.h>using namespace std;v…

Tensorflow2.0笔记 - tensor的padding和tile

本笔记记录tensor的填充和tile操作&#xff0c;对应tf.pad和tf.tile import tensorflow as tf import numpy as nptf.__version__#pad做填充 # tf.pad( tensor,paddings, modeCONSTANT,nameNone) #1维tensor填充 tensor tf.random.uniform([5], maxval10, dtypetf.int32) pri…

知识点积累系列(四)Kubernetes篇【持续更新】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 知识点积累 系列文章的第四篇&#xff0c;记录日常学习中遇到的 Kubernetes 相关的知识点 1.Kubernetes琐碎知识点 1.1.为什么要有annotations annotation中除了能够记录一些额外信息&#xff0c;还可以解决k…

3d模型上的材质怎么删除---模大狮模型网

在大多数3D软件中&#xff0c;可以通过以下步骤来删除3D模型上的材质&#xff1a; 选择要删除材质的模型&#xff1a;首先&#xff0c;从场景中选择包含目标材质的模型。可以使用选择工具或按名称查找模型。 进入编辑模式&#xff1a;将模型切换到编辑模式。这通常需要选择相应…

【Docker】WSL(Windows Subsystem for Linux)常见命令解释说明以及简单使用

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

设计模式学习笔记02(小滴课堂)

江湖传言里的设计模式-单例设计模式 单例设计模式中的懒汉方式实战 这种方式是线程不安全的&#xff0c;多个线程同时调用会创建多个对象。 所以我们就要给它加锁: 我们去测试一下&#xff1a; 因为构造函数已经私有化&#xff0c;所以不能直接用new的方式去创建对象。 现在我…

多线程事务如何回滚?

背景介绍 1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败&am…

Stable Diffusion web UI 安装、启动脚本、常见问题、插件(linux)

Stable Diffusion本身是一个模型&#xff0c;对于大多数想试试的人来说&#xff0c;使用这个web ui版本最合适 建议先看完再动手&#xff0c;虽然不难但是有门槛&#xff08;主要要解决网络问题&#xff09;&#xff0c;如果深入需要会python 如果只是想试试的&#xff0c;建议…

市面上的小型办公室都是哪些人在租?

市面上的小型办公室&#xff0c;又称服务式办公室&#xff0c;是一种将传统的写字楼进行精装修&#xff0c;分割成若干个独立的小型办公空间&#xff0c;提供给不同的租户的新型办公模式。那么&#xff0c;市面上的小型办公室都是哪些人在租&#xff1f;本文将从租户的特点和需…

Linux服务器配置与管理(第四次实验)

实验目的及具体要求 目的 1.了解网络配置之文件 2.掌握网络常用命令 3.掌握ssh远程连接 任务 1.修改主机名为TX 2.查看系统的网络接口信息 3.在路由表中添加一条路由 4.删除上一步添加的路由 5.查看网络中所有的TCP端口连接信息 6.X SHELL远程链接Centos系统 7.在X …

35岁老兵,从金山被裁员到创业

35岁&#xff0c;对于许多人而言&#xff0c;是事业中一个重要的节点。对我而言&#xff0c;这一年成为了我生命中的转折点。2023年8月份的一个上午&#xff0c;突然被领导叫到小黑屋&#xff0c;告知我被裁员了。起初&#xff0c;这个决定对我来说是一个巨大的打击&#xff0c…

榜单!AR-HUD进入高增速周期,TOP10本土供应商争夺市场

高工智能汽车研究院数据显示&#xff0c;2023年1-9月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用车前装标配W/AR HUD交付149.54万辆&#xff0c;同比增长45.86%。 其中&#xff0c;W-HUD仍是主流。而同期&#xff0c;AR-HUD的前装标配搭载量超过10万辆&#x…

Mysql-ReadView + MVCC-RR 与 RC

实验准备 创建脚本 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,age int(11) NULL DEFAULT NULL,addr varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,PRIMARY …

希尔伯特变换的在信号解调时的示例

1.希尔伯特变换的应用场景 希尔伯特变换&#xff0c;在数学上的含义是清晰的。它是一个数字移相器&#xff0c;可以把通过它的任何一个信号相移-90度。这个数学工具在信号解调时&#xff0c;会有非常有用的特性出现。可以看示例&#xff1a; 解释一下&#xff1a; 1.最上面的…

transformer | transformer的输入部分input coding

文章目录 transformer的输入部分input codingBPEBPE所解决的问题——OOV PE&#xff08;Position Encoding&#xff09;位置编码 transformer的输入部分input coding transformer的输入部分input codingBPEPE BPE BPE是指一种词分类算法。 起初&#xff0c;会将每个单词都拆分…

旧物回收小程序开发:创新与可持续发展的交汇点

随着社会的发展和人们生活水平的提高&#xff0c;物品的更新换代速度越来越快&#xff0c;这导致了大量的旧物被闲置或丢弃。为了解决这个问题&#xff0c;旧物回收成为了重要的环保行动。而随着移动互联网的普及&#xff0c;旧物回收小程序的开发也成为了新的趋势。本文将探讨…

本次安装Visual Studio 所用的安装程序不完整。请重新运行VisualStudio安装程序以解决此问题

今天点开VS的时候遇到了这个问题 因为昨天升级到一半电脑关机了&#xff0c;今天打开软件遇到如下错误&#xff0c; 解决办法很简单&#xff0c;找到安装目录进入Installer文件夹 我的目录在C:\Program Files (x86)\Microsoft Visual Studio\Installer 找到vs_installer.exe…

《HTML 简易速速上手小册》第8章:HTML 表单高级技术(2024 最新版)

文章目录 8.1 数据收集与处理8.1.1 基础知识8.1.2 案例 1&#xff1a;创建一个注册表单8.1.3 案例 2&#xff1a;创建一个调查问卷表单8.1.4 案例 3&#xff1a;创建一个动态添加输入字段的表单 8.2 定制化表单元素8.2.1 基础知识8.2.2 案例 1&#xff1a;创建一个带有定制选择…

打击者H5小游戏

欢迎来到程序小院 打击者 玩法&#xff1a;点击飞机上下左右移动躲过子弹射击&#xff0c;打掉上方敌人飞机&#xff0c; 遇到药包会增加能量&#xff0c;弹药包会升级武器&#xff0c;快去射击吧^^。开始游戏https://www.ormcc.com/play/gameStart/262 html <div id"…