赞
踩
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
(4)200多本电子书
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
(5)Python知识点汇总
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
(6)其他资料
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。
这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Create Office Hours Chat
{% if status and status.video_room %}
Success! Office hours room: {{status.video_room.name}} ✅
{% endif %}
这个应用程序的UI并不复杂。它包括一个表单,允许用户输入他们的姓名、电话号码和他们希望接待人们的办公时间视频室的名称。它还有一个显示状态消息的部分,让用户知道房间是否创建成功。在这个HTML文件中,您还引用了一个_样式. css_文件—让我们现在创建它。
创造_static/styles.css_并粘贴以下CSS样式:
.container {
margin-top: 20px;
font-family: sans-serif;
}
h1 {
text-align: center;
}
form {
text-align: center;
}
.data-field {
margin-bottom: 0.5em;
}
input {
padding: 0.6em;
border: 2px solid rgb(177, 189, 233);
border-radius: 5px;
vertical-align: middle;
font-size: 14px;
}
input:focus {
outline: 0;
border-color: #0e364d;
}
label {
text-align: right;
display: inline-block;
width: 6em;
margin: 0 1em 0 0;
}
button {
padding: 0.75em 1em;
border: none;
background-color: rgb(27, 111, 189);
border-radius: 4px;
font-size: 100%;
color: rgb(255, 255, 255);
margin: 0.5em auto;
}
button:focus,
button:hover {
background-color: rgb(88, 166, 240);
}
button:active {
background-color: rgb(177, 189, 233);
}
#status {
margin: 0.5em auto;
text-align: center;
color: rgb(13, 73, 32);
}
现在你的应用看起来更有趣了。
是时候运行你的服务器了。但是,在此之前,在项目的根目录下创建一个名为_。flaskenv_。这是为烧瓶配置添加环境变量的地方。打开_。flaskenv_并添加以下几行:
FLASK_APP=app.py
FLASK_ENV=development
然后,在您的终端中,通过运行以下命令启动服务器:
flask run
一旦服务器启动,您将看到如下日志:
(venv) [office-hours] flask run
* Serving Flask app ‘app.py’ (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 290-231-040
如果您打开浏览器http://localhost:5000/,您将能够在那里看到应用程序:
既然已经设置了前端代码,那么是时候编写Python函数了,这些函数将实际控制视频房间的创建以及当有人加入房间时SMS的发送。
创建一个带有自定义超时的视频室
让我们定义一个名为get_or_create_room()
这将调用Twilio视频室API来获取或创建视频室。将以下代码粘贴到_app.py_要创建函数:
@app.route(‘/’, methods=[‘POST’])
def get_or_create_room():
identity = request.form.get(‘identity’).strip() or None
phone = request.form.get(‘phone’).strip() or None
room_name = request.form.get(‘room_name’).strip() or None
if identity is None or phone is None or room_name is None:
abort(400, ‘Missing one of: identity, phone, room_name’)
video_room_list = client.video.rooms.list(limit=20)
found_video_rooms = [room for room in video_room_list if room.unique_name == room_name]
video_room = found_video_rooms[0] if found_video_rooms else None
request_url = request.url_root
callback_url = f’{request_url}message’
if video_room and video_room.status_callback != callback_url:
abort(400, ‘Status callback URL has changed; please create a room with a different name’)
if not video_room:
video_room = client.video.rooms.create(
unique_name=room_name,
empty_room_timeout=60,
unused_room_timeout=60,
status_callback=callback_url,
status_callback_method=‘POST’,
)
office_hours_appointment = {
‘identity’: identity,
‘phone’: phone,
‘room_name’: video_room.unique_name,
‘room_sid’: video_room.sid
}
office_hours_meeting = Query()
selected_meeting = db.get(office_hours_meeting.room_sid == video_room.sid)
if not selected_meeting:
db.insert(office_hours_appointment)
return render_template(‘index.html’, status={
‘video_room’: {
‘sid’: video_room.sid,
‘name’: video_room.unique_name,
‘empty_room_timeout’: video_room.empty_room_timeout,
‘unused_room_timeout’: video_room.unused_room_timeout,
‘status_callback’: video_room.status_callback
}
})
该函数获取应用程序客户端发送的数据,并验证所需的一切都存在。然后,它获取视频房间名称的变量,并检查是否已经存在同名的活动房间。如果不存在,将使用输入的房间名称创建一个新房间。
该函数的一个关键部分是设置unused_room_timeout
和empty_room_timeout
。默认情况下,通过Rooms API创建的新的空视频室将保持活动状态5分钟,以便人们加入。如果没有人加入房间,它将关闭并需要重新创建。您可以通过设置unused_room_timeout
。该值表示无人加入时房间保持活动状态的分钟数。在办公时间房间的例子中,我们将这个值设置为60,这样即使没有人出现,房间也可以开放一个小时。您可以根据自己的喜好随意设置这个值。
另一个价值,empty_room_timeout
,用于设置在最后一个参与者离开后房间应该保持开放多长时间。在办公时间房间的情况下,房间的负责人可能希望在另一个参与者加入时加入房间,在他们的谈话结束后离开房间,然后在另一个参与者加入时再次进入房间。对于这个项目,我们已经设置了empty_room_timeout
到60分钟,但是你可以根据自己的喜好随意定制。
这个函数的另一个重要部分是我们在哪里设置一个status_callback
。这是一个URL,您的应用程序将通过它接收视频房间内发生的事件的状态信息。房间状态回叫事件的完整列表可以在这里找到。对于这个项目,我们将只跟踪participant-connected
事件,因为当有人加入视频房间时,我们希望通知房间创建者,以便他们也可以加入。应用程序将从请求的获取页面地址url_root
并添加/message
route,您将在下一步中创建它。
如果您想了解更多关于视频室的资源属性,请查看这里是Rooms REST API的文档 .
有人加入视频室时发送短信
是时候创建一条路由了,当有人加入视频室时,这条路由将向视频室的创建者发送短信。在…里_app.py_,在下面get_or_create_room()
,粘贴以下内容/message
路线和send_participant_notification()
功能:
@app.route(‘/message’, methods=[‘POST’])
def send_participant_notification():
event = request.values.get(‘StatusCallbackEvent’)
if event == ‘participant-connected’:
room_sid = request.values.get(‘RoomSid’)
office_hours_meeting = Query()
selected_meeting = db.get(office_hours_meeting.room_sid == room_sid)
participant = request.values.get(‘ParticipantIdentity’)
room_name = selected_meeting.get(‘room_name’)
phone = selected_meeting.get(‘phone’)
identity = selected_meeting.get(‘identity’)
client.messages.create(
body=f’Hello {identity}! {participant} has joined your office hours room: {room_name}',
from_=TWILIO_PHONE_NUMBER,
to=phone
)
return (‘’, 204)
在这个函数中,您获取状态回调事件并检查它是否是一个participant-connected
事件。如果是,该函数将采用room_sid
并在数据库中查找该房间,以获得应该通知的人的详细信息。一旦找到那个人的联系信息,它就使用他们的identity
和phone
号码发送手机短信,详细介绍participant
谁加入了视频室。
出于安全原因,您可能希望验证对应用程序的HTTP请求确实来自Twilio,而不是来自第三方。
Twilio添加了一个X-Twilio-Signature
头,并在其助手库中提供了一个内置的请求验证器,您可以用它来验证这个签名的真实性。在这里的文档中了解如何使用请求验证器 .
测试应用程序
是时候测试您的应用程序了。对于这一部分,您将需要一个Twilio视频应用程序,它允许您输入房间名称。如果您有自己的应用程序,请随意使用,或者您可以使用开源Twilio视频反应应用,如本教程中所示。
要获得Twilio Video React应用程序的代码,请在此处克隆存储库:https://github.com/twilio/twilio-video-app-react。按照中的说明进行操作自述文件在本地设置应用程序或在Twilio函数上部署它。
您还需要允许您的Flask应用程序可以访问更广泛的互联网,以便进行该测试。对于项目的这一部分,您可以使用工具创建临时公共URL。要启动新的ngrok隧道,请打开一个新的终端窗口,并从项目的根目录运行以下命令:
ngrok http 5000
ngrok运行后,您将在终端窗口中看到如下日志:
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account <YOUR_ACCOUNT_NAME>
Version 2.3.40
Region <YOUR_REGION>
Web Interface http://127.0.0.1:4040
Forwarding -> http://localhost:5000
Forwarding -> http://localhost:5000
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
看看旁边的网址Forwarding
。现在,对这些ngrok URLs的任何请求都将被转发到您的Flask服务器。
选择_安全超文本传输协议_URL并在浏览器中打开它。您将在那里看到办公时间应用程序:
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。