diff --git a/app.py b/app.py index 22fbb03985f..dedc07325f4 100644 --- a/app.py +++ b/app.py @@ -2,6 +2,7 @@ import base64 import binascii import collections +from glob import glob import logging import datetime import os @@ -83,6 +84,26 @@ # Most files should be loaded through the CDN which has its own caching period and invalidation. # Use 5 minutes as a reasonable default for all files we load elsewise. app.config['SEND_FILE_MAX_AGE_DEFAULT'] = datetime.timedelta(minutes=5) +app.config["SERVER_NAME"] = "localhost:8080" + +for rule in app.url_map.iter_rules('static'): + app.url_map._rules.remove(rule) +app.url_map._rules_by_endpoint['static'] = [] +app.view_functions["static"] = None +app.static_folder = 'static' +app.add_url_rule('/', + endpoint='static', + subdomain="", + view_func=app.send_static_file) + +# optional. If not set, the above view_func will be passed as a parameter. + + +@app.url_value_preprocessor +def before_route(endpoint, values): + if values is not None and endpoint == 'static': + values.pop('language', None) + setup_language(language=values.get('language', None)) def get_locale(): @@ -396,13 +417,20 @@ def before_request_https(): @app.before_request -def setup_language(): +def setup_language(language=None): # Determine the user's requested language code. # # If not in the request parameters, use the browser's accept-languages # header to do language negotiation. Can be changed in the session by # POSTing to `/change_language`, and be overwritten by remember_current_user(). - if lang_from_request := request.args.get('language', None): + print(language) + if language: + session['lang'] = language + elif (lang_from_subdomain := request.url_rule.subdomain) and lang_from_subdomain != '': + if lang_from_subdomain == 'zh_hans': + lang_from_subdomain = 'zh_Hans' + session['lang'] = lang_from_subdomain + elif lang_from_request := request.args.get('language', None): session['lang'] = lang_from_request if 'lang' not in session: session['lang'] = request.accept_languages.best_match( @@ -1326,13 +1354,13 @@ def hour_of_code(level, program_id=None): # routing to index.html -@app.route('/ontrack', methods=['GET'], defaults={'level': '1', 'program_id': None}) -@app.route('/onlinemasters', methods=['GET'], defaults={'level': '1', 'program_id': None}) -@app.route('/onlinemasters/', methods=['GET'], defaults={'program_id': None}) -@app.route('/hedy', methods=['GET'], defaults={'program_id': None, 'level': '1'}) -@app.route('/hedy/', methods=['GET'], defaults={'program_id': None}) -@app.route('/hedy//', methods=['GET']) -def index(level, program_id): +@app.route('/ontrack', methods=['GET'], defaults={'level': '1', 'program_id': None}, subdomain="") +@app.route('/onlinemasters', methods=['GET'], defaults={'level': '1', 'program_id': None}, subdomain="") +@app.route('/onlinemasters/', methods=['GET'], defaults={'program_id': None}, subdomain="") +@app.route('/hedy', methods=['GET'], defaults={'program_id': None, 'level': '1'}, subdomain="") +@app.route('/hedy/', methods=['GET'], defaults={'program_id': None}, subdomain="") +@app.route('/hedy//', methods=['GET'], subdomain="") +def index(level, program_id, language='en'): try: level = int(level) if level < 1 or level > hedy.HEDY_MAX_LEVEL: @@ -1554,8 +1582,8 @@ def index(level, program_id): )) -@app.route('/hedy', methods=['GET']) -def index_level(): +@app.route('/hedy', subdomain="", methods=['GET']) +def index_level(language): if current_user()['username']: highest_quiz = get_highest_quiz_level(current_user()['username']) # This function returns the character '-' in case there are no finished quizes @@ -1565,9 +1593,14 @@ def index_level(): level_rendered = hedy.HEDY_MAX_LEVEL else: level_rendered = highest_quiz + 1 - return index(level_rendered, None) + return index(level_rendered, None, language) else: - return index(1, None) + return index(1, None, language) + + +@app.route('/hedy', methods=['GET']) +def index_test(): + return index_level('en') @app.route('/hedy//view', methods=['GET']) @@ -2558,6 +2591,18 @@ def public_user_page(username): return utils.error_page(error=404, ui_message=gettext('user_not_private')) +@app.route('/community', subdomain="zh_hans", methods=['GET']) +@app.route('/community/
', subdomain="zh_hans", methods=['GET']) +def chinese_community(section='index'): + files = glob('templates/communities/zh_hans/*.html') + article_names = [os.path.basename(file).replace('.html', '') for file in files] + return render_template( + f'communities/zh_hans/{section}.html', + article_names=article_names, + section=section + ) + + def valid_invite_code(code): if not code: return False diff --git a/templates/communities/community-template.html b/templates/communities/community-template.html new file mode 100644 index 00000000000..e5fbda0c89d --- /dev/null +++ b/templates/communities/community-template.html @@ -0,0 +1,17 @@ +{% extends "auth.html" %} +{% block regular_content %} +
+ {# This is where the index will be #} +
+ {% for name in article_names %} + + {% endfor %} +
+ {% block community_content %}{% endblock %} +
+{% endblock %} \ No newline at end of file diff --git a/templates/communities/zh_hans/article1.html b/templates/communities/zh_hans/article1.html new file mode 100644 index 00000000000..87adf5d2c79 --- /dev/null +++ b/templates/communities/zh_hans/article1.html @@ -0,0 +1,75 @@ +{% extends "communities/community-template.html" %} +{% block community_content %} +
+

前宣-对家长-推文三

+

我: 30岁,职场女性,孩子正在上五年级... + 前两天我接五年级的儿子放学回家,一路上被青少年教育类产品的各种销售围追堵截。这些青少年教育类产品五花八门,有拉丁舞、书法、英语新概念、奥数、口才,我已经对这些兴趣班或者辅导班司空见惯,但”机器人实践营“、”编程语言学习课“这些编程类课程令我耳目一新,我意识到——我现在正处在一个人工智能快速发展的时代,也处在一个人人学编程的时代。

+

我的脑子里浮现出两个问题: + 孩子是否有必要学习编程? + 以及应该如何学习编程?

+

我认为十分有必要去找到这两个问题的正确答案,因为第一个问题关系到孩子的未来发展,第二个问题关系到他的学习体验和效果。 + 于是,我停下脚步,耐心听销售讲解,同时也自主展开对这两个问题的探索。 + 青少年是否有必要学习编程?

+
    +
  • 为升学做准备; + 编程陆续被各省分纳入中高考自主招生政策,成为中高考升学加分的途径之一。 + 浙江省已在高考中加入以Pyhon为考察对象的信息技术考试,成为高考科目之一,与化学与生物同等占有100分的比例,分别在今年和去年开展了考试。浙江率先将编程纳入高考范围,北京、山东、广东等省份也将紧随其后。
  • +
+

除此之外,孩子可以通过学习编程打竞赛在小升初、初升高两个阶段走科技特长生的路径,走综合评价生、强基计划、保送政策这三种路径在高升大时获取升学机会。

+
    +
  • 作为一种兴趣爱好,培养编程思维; + 编程其实就是将自己的想法,变成一个逻辑条理清晰、可以照此执行的代码的过程。换一种方式说,它是个“解决问题-找出路径-得出结果的过程,这中间包含了拆分问题、关键聚焦、归纳规律的环节。 + 而少儿编程类产品用游戏的方式应用于生活,让孩子更容易理解和适应,可以提高他们解决问题的能力,增强逻辑思维、创造力和意志力,同时助力理解科技产品原理,。
  • +
  • 辅助未来就业; + 随着科技的发展,编程技能在职场中的需求日益增加,它不仅是IT行业的专属技能,已经成为许多行业的基础能力,如金融、医疗、教育等。掌握编程,孩子将来就业的选择会更加广泛。
  • +
+

应该如何学习编程? + 我了解到现在市场上的青少年编程,分为三种:

+
    +
  1. Scratch。 + [图片] + 适用于学龄前-小学低年级; + 它是一种图形化编程语言和开发环境,它使用图块组成代码,让孩子们通过拖拽和拼接图块的方式创建程序。 + 它培养了学生的逻辑思维和动手能力,但对于掌握真正的编程语言帮助有限,那些学习了Scratch的学生在学习真正的编程语言时,仍然不知所措,需要从基础开始学习;
  2. +
  3. Python。 + [图片] + 适用于小学低年级-初中; + 是一种通用、易于学会的文本编程语言,受到广泛使用。 + 如果以培养编程思维、掌握编程基础,那么比较适合学习Python。 + Python是目前高考改革中的唯一官方编程语言,Python语言课程化将成为孩子们学习的一种趋势。
  4. +
  5. C++。 + [图片] + 适用于小学高年级-高中; + 是一种通用的文本编程语言,相比Python,学习难度较高,更加抽象,适合有一定编程基础的孩子。 + C++是信息技术奥林匹克竞赛的官方语言,掌握C++可参加信奥赛,助力升学加分。
  6. +
+

有一些学习编程语言(比如Python和C++)的机构研制的课程,但这些课程质量良莠不齐,有一些通病:

+
    +
  • 对于青少年来说,编程语言抽象,入门困难,初学者需要合适的指引,但一些机构追求效果的呈现,至于孩子是否真正学懂并不可知;
  • +
  • 只是对编程知识进行切分,把大的知识点切割成细小的知识点,但孩子并不能适应语言系统; + ······
  • +
+

儿子已经上小学五年级,即将面临升学的压力,课程繁重,并且兴趣班已经比较多,占据了大部分的课余时间,我不希望他在学习编程方面花费过多的时间和精力,因此我需要一个能够让他轻松高效学习的产品。 + Scratch比较适合低龄的小学生,内容简单并且效果有限,不适合儿子入门编程。因为儿子没有编程基础,所以他作为初学者比较适合首先学习Python,但Python作为一门高级编程语言对于儿子来说入门比较困难。除此之外,我也挑选不到合适的课程。 + 我发现,想要让上小学五年级的儿子轻松有效掌握编程,放眼市场众多青少年教育类产品,却找不到合适的一款。

+

幸而,我偶然了解到Hedy(官网链接:Hedy.org),它是一个专注于青少年编程教育的平台,已经在欧洲多个国家广泛应用并收获一致好评。在中国,Hedy在上海的一所国际学校进行了为期一学期的试点项目,它能够满足不同学习者的需求,其课程内容和教学方法通过了实践的检验。 + [图片] + 进入官网,即可看到首页第一句话——一种渐进式的编程语言。这是Hedy的一个显著特点。

+

Hedy先引入基础概念和最简语法,逐步深入到复杂内容,通过18个level层层递进,让学习者在掌握编程技能的同时减轻学习负担。 + 它像游戏闯关一样玩编程,让孩子在玩中渐进入门Python。每个level都设有一些相关的游戏挑战,这些游戏挑战涵盖了从基础的命令操作到复杂的项目制作等多个方面。孩子可以根据自己的学习进度选择适合游戏挑战,如果出错,hedy会一步步的引导直至完全掌握。 + [图片] + 真正触动我的是,对于青少年学习者来说,它是Python与Scratch之间的桥梁。它充分融合了图形化编程(Scratch)和文本编程(Python)的优势,为青少年编程学习者提供了更加灵活和全面的学习平台。它简化了从图形化编程到文本编程的过渡过程,能够有效激发学习者的编程兴趣和创造力。

+

其次,Hedy为教学而生。Hedy现在base在华东师范大学信息工程学院下,已经与成都电子科大、上海国际学校建立了合作关系,共同开发课程内容,提供师资培训,以及举办编程竞赛和活动。

+

它是多语言的。这意味着,孩子可以用自己熟悉的语言进行编程,可以在语言栏里选择中文(简体)。Python入门难,因为它只有英文版本,并且要求学习者立即学习复杂的编程概念和语法。 + [图片] + Hedy 可以免费使用,并且有免费的飞书社区。Hedy的社区正在不断壮大,其鼓励学习者、教育者和开发者在平台上分享经验、交流想法,共同推动编程教育的发展。 + Hedy 是入门文本编程语言的最佳选择! + [图片] + 现在儿子已经学习了一个月,完成了hedy前3个level的学习,已经初步掌握编程的基础知识,如变量、列表等,并且能够简单的设计一些小游戏,如石头剪刀布等。而且每次学习都很积极主动,学习过程中也能看得出他很享受,体验感很强。 + 相信可能很多家长和我有相似的困扰,故将hedy分享给你们,我认为这是一个好的产品。

+

Hedy的社区运营者创建了七天学习营,旨在引导和帮助初学者熟悉Hedy,正确使用Hedy进行学习。这是一场免费的学习辅导,如果想要了解Hedy,入门编程,掌握编程思维,欢迎联系! + (此处放海报 + (联系方式:微信二维码

+ +
+{% endblock %} \ No newline at end of file diff --git a/templates/communities/zh_hans/article2.html b/templates/communities/zh_hans/article2.html new file mode 100644 index 00000000000..220edbc8b68 --- /dev/null +++ b/templates/communities/zh_hans/article2.html @@ -0,0 +1,40 @@ +{% extends "communities/community-template.html" %} +{% block community_content %} +
+

前宣-对家长-推文四

+

Hedy + 大多数家长可能都有这样的经历:在接送孩子上下学,一路上被青少年教育类产品的各种销售围追堵截。

+

这些产品五花八门,有拉丁舞、书法、英语新概念、奥数、口才,家长们对这些兴趣班或者辅导班司空见惯。

+

如果有留意到”机器人实践营“、”编程语言学习课“这些编程类课程,可能会令人耳目一新,但其实少儿编程这个话题变得越来越火热了,大部分人都意识到了这是一个大趋势。 + 从小就要学编程没错,但作为家长,很多人还对少儿编程没有一个正确的认识,它是区别于成人编程,更注重在学习中培养孩子解决问题的思维。

+

再加上市面上的编程课越来越多,有些家长就变得更迷茫了。

+

不仅如此,很多家长都会有这些疑惑:

+

为什么现在都说要学编程呢?一定要现在学吗?

+

更让家长担心的是:不少人都在说少儿编程是智商税? + 确实,市面上涌现了非常多编程机构,家长们为了孩子花好几万却一直不见成果,孩子还是一直在玩积木,但是少儿编程真是如此吗? + 01「我们学习少儿编程的目的是什么?」 + 少儿编程一定是未来发展大趋。 + 人工智能时代下,未来的要求一定是利用AI,掌握AI,小阶段做编程启蒙,进阶走科特赛道、参加信奥赛,能让孩子在未来学业、工作中有更多的选择。 + 我国教育方针也是大力支持,编程陆续被各省分纳入中高考自主招生政策,成为中高考升学加分的途径之一。

+

浙江省已在高考中加入以Pyhon为考察对象的信息技术考试,成为高考科目之一,与化学与生物同等占有100分的比例,分别在今年和去年开展了考试。

+

浙江率先将编程纳入高考范围,北京、山东、广东等省份也将紧随其后。

+

除此之外,孩子可以通过学习编程打竞赛在小升初、初升高两个阶段走科技特长生的路径,走综合评价生、强基计划、保送政策这三种路径在高升大时获取升学机会。 + 也就是说这是和孩子升学相挂钩的 + 02「要怎么学编程呢?」 + 好在,Hedy,这一渐进式开发语言学习平台出现了。 + 它是一个专注于青少年编程教育的平台,已经在欧洲多个国家广泛应用并收获一致好评。 + 在中国,Hedy在上海的一所国际学校进行了为期一学期的试点项目,它能够满足不同学习者的需求,其课程内容和教学方法通过了实践的检验。 + 03「Hedy是什么?」 + 简单来说,让孩子像玩游戏闯关一样,Hedy分为18个level,层层递进,每个level都设有一些对应的小挑战,可以根据自己的学习进度选择适合的,让孩子在掌握编程技能的同时减轻学习负担。 + 我们考虑到孩子现阶段的特点,用有趣的图画配有轻松易读的文字,照顾孩子们的情绪,让整个学习过程变得轻松有趣,还可以激发他们与生俱来的好奇心,培养创造力。

+

Hedy从简单的概念开始,逐渐过渡到更复杂的内容,让孩子逐步建立编程知识体系。

+

从多个维度逐步引导孩子学习编程,不仅让孩子像玩游戏一样快乐学习,可以使用自己熟悉的语言轻松学习,更重要的是知识吸收上循序渐进。 + Hedy还提供了多种语言,可以用熟悉的汉语,如果孩子正在学习英语,也可以很方便地切换为英文学习。 + Hedy现在base在华东师范大学信息工程学院下,已经与成都电子科大、上海国际学校建立了合作关系,共同开发课程内容,提供师资培训,以及举办编程竞赛和活动。 + 我们正在创建七天学习营,旨在引导和帮助初学者熟悉Hedy,正确使用Hedy进行学习。这是一场免费的学习辅导,如果想要了解Hedy,入门编程,掌握编程思维,欢迎联系! + (联系方式:微信二维码 + 球分享 + 球点赞 + 球在看

+
+{% endblock %} \ No newline at end of file diff --git a/templates/communities/zh_hans/article3.html b/templates/communities/zh_hans/article3.html new file mode 100644 index 00000000000..9607f015ffb --- /dev/null +++ b/templates/communities/zh_hans/article3.html @@ -0,0 +1,69 @@ +{% extends "communities/community-template.html" %} +{% block community_content %} +
+

前宣系列-对家长-第五版

+

Hedy + 锵锵锵,Hedy中国cn.hedy.org正式推出啦~

+

——由⿇省理⼯学院计算机科学教育教授费利安及其科研团队开发的一款渐进式开源编程语言网站及社区。

+

中国社区由校园VC创始⼈、清华⼤学创业导 + 师殷建松与Python中国社区创始人大妈、BetterMe青年主理人Sunny林琅、Scarlett荷淼、Simon王求真、徐浩然、汪增光等人共建。

+

用户主要是编程爱好者,包含10-17岁的青少年,也包含少部分17-25岁的青年。当然了,开源社区没有限定,欢迎任何行业和任何年龄段的朋友加入。 + 大多数家长可能有这样的经历:

+

在接送孩子上下学时,一路上被青少年教育类产品的各种销售围追堵截。

+

这些产品五花八门,有拉丁舞、书法、英语新概念、奥数、口才,家长们对这些兴趣班或者辅导班司空见惯。

+

“机器人实践营”、“编程语言学习课”这些编程类课程,可能会令人耳目一新,但随着少儿编程这个话题变得越来越火热,大部分人都意识到了这是一个大趋势。 + 在少儿编程领域中,是否从小就要学编程这一经典问题的争议很大,这是因为大多数人对于少儿编程没有一个正确的认识。在这样的一个教育环境下,市面上的编程课越来越多,导致有些家长变得更迷茫。

+

从小就要学编程没错,因为少儿编程更注重在学习中培养孩子解决问题的思维,这正是少儿编程与成人编程的区别所在。

+

不仅如此,很多家长还会有这些疑惑:

+

为什么现在都说要学编程呢?一定要现在学吗?

+

更让家长担心的是:不少人都在说少儿编程是智商税?

+

家长为了孩子花好几万却不见成果,孩子还是一直在玩积木,少儿编程真是如此吗? + 01「孩子学习少儿编程的目的是什么?」 + 少儿编程一定是未来发展大趋。 + 人工智能时代下,未来的要求一定是利用AI,掌握AI,小阶段做编程启蒙,进阶走科特赛道、参加信奥赛,能让孩子在未来学业、工作中有更多的选择。 + 我国教育方针也是大力支持,编程陆续被各省分纳入中高考自主招生政策,成为中高考升学加分的途径之一。

+

浙江省已在高考中加入以Pyhon为考察对象的信息技术考试,成为高考科目之一,与化学与生物同等占有100分的比例,分别在今年和去年开展了考试。

+

浙江率先将编程纳入高考范围,北京、山东、广东等省份也将紧随其后。

+

除此之外,孩子可以通过学习编程打竞赛在小升初、初升高两个阶段走科技特长生的路径,走综合评价生、强基计划、保送政策这三种路径在高升大时获取升学机会。 + 也就是说这是和孩子升学相挂钩的 + 02「要怎么学编程呢?」 + 少儿编程作为一颗教育界冉冉上升的新星,带来教育改革的同时,也带来了新的商机。市面上涌现出了非常多的编程机构,而且这些机构的课程质量参差不齐,导致了市场的混乱。 + 好在,Hedy,这一开源渐进式编程语言学习平台出现了。

+

Hedy 是一个创新的编程语言学习平台,它专门为教育环境设计,旨在帮助学生从图形化编程(如Scratch)平滑过渡到文本编程语言(如Python)。

+
    +
  1. +

    什么是开源? + 开源指的是软件的源代码对公众开放,允许用户自由使用、修改和分发。这意味着任何人都可以查看代码,对其进行改进,并将其用于自己的项目。Hedy 本身就是开源的,它的代码可以在 GitHub 上找到,任何人都可以参与改进这个平台 。

    +
  2. +
  3. +

    什么是渐进式? + 渐进式学习是一种逐步引入新概念和复杂性的方法。在 Hedy 平台上,每个关卡都聚焦于特定的编程概念和语法结构,随着学生通过更多关卡,他们将接触到更复杂的编程知识。这种方法有助于学生更好地理解和掌握编程语言 。

    +
  4. +
  5. +

    学的是什么语言? + Hedy 旨在教授文本编程语言,学习Python。它通过简化的语法和逐步增加的复杂性,让学生在不知不觉中掌握 Python 语言的基础知识。Hedy 的设计使得学生在学习过程中能够创建数字故事、彩色绘图、游戏和应用程序等,这些都是在 Python 环境中常见的项目类型 。 + 它是一个专注于青少年编程教育的平台,已经在欧洲多个国家广泛应用并收获一致好评。 + 在中国,Hedy在上海的一所国际学校进行了为期一学期的试点项目,并且和电子科技大学达成了合作,它能够满足不同学习者的需求,其课程内容和教学方法通过了实践的检验。 + 03「Hedy是什么?」 + 简单来说,让孩子在玩游戏闯关的过程中逐步将知识融会贯通。

    +
  6. +
+

Hedy将内容分为18个level,层层递进,每个level都设有一些对应的小挑战,聚焦于特定的编程概念和语法结构,孩子可以根据自己的学习进度选择适合的关卡。 + 我们考虑到孩子现阶段的特点,在内容呈现上,将有趣的图画配以轻松易懂的文字,让整个学习过程变得轻松有趣,照顾了孩子们的情绪,还可以激发他们与生俱来的好奇心,培养创造力。

+

在知识的学习上,Hedy对知识进行了细致规律地划分,使知识连点成线,连线成面,极大限度地减少孩子学习过程中的卡点,从简单的概念开始,逐渐过渡到更复杂的内容,建立编程知识体系。

+

与此同时,Hedy还提供了多种语言,孩子可以用熟悉的汉语,如果孩子正在学习英语,也可以很方便地切换为英文学习。

+

Hedy从多个维度逐步引导孩子,不仅让孩子在游戏的闯关中快乐学习,可以使用自己熟悉的语言轻松适应编程环境,而且能够丝滑顺畅的掌握一个个知识点,使学习者能够轻松高效地掌握编程。 + Hedy现在base在华东师范大学信息工程学院下,已经与成都电子科大、上海国际学校建立了合作关系,共同开发课程内容,提供师资培训,以及举办编程竞赛和活动。 + 我们创建了编程爱好者学习交流的微信群,旨在引导和帮助人们熟悉Hedy,正确使用Hedy进行学习。这是一场免费的学习指导,也包含了不限次的自由探讨,如果想要了解Hedy,入门编程,掌握编程思维,欢迎联系! + (联系方式:微信二维码

+

官网:hedy.org + 中国社区官网:cn.hedy.org + discord账号: + youtube: + B站: + 小红书:Hedy编程教育 + 球分享 + 球点赞 + 球在看

+
+{% endblock %} \ No newline at end of file diff --git a/templates/communities/zh_hans/index.html b/templates/communities/zh_hans/index.html new file mode 100644 index 00000000000..a9286881be9 --- /dev/null +++ b/templates/communities/zh_hans/index.html @@ -0,0 +1,19 @@ +{% extends "communities/community-template.html" %} +{% block community_content %} +
+

Chinese Community

+
+

灵魂三问

+
+

README for ch.hedy.org

+
+

我是谁

+

... + ......

+

从哪来

+

要去哪

+
+

logo

+
+
+{% endblock %} \ No newline at end of file