[elixir! #0011] 打开一个phoenix网站时发生了什么?

news/2024/4/28 4:29:58/文章来源:https://blog.csdn.net/weixin_34297704/article/details/89201546

以 https://www.phoenix-china.org/ 为例.

当我们在浏览器中输入 https://www.phoenix-china.org/ , 按下回车后, 我们将访问phoenix-china论坛. 这是一个使用phoenix框架搭建的网站. 我们省略掉域名的解析等过程, 跟随我们的connection,直接进入phoenix, 看看究竟发生了什么.

接下来我们将称呼connection为Mr.conn.

按图索骥, 在router.ex文件里问路

首先, phoenix把 Mr.conn 带到了web/router.ex文件, 这里是phoenix世界里的中转站. 我们访问的是根域名, 所以对应的路径是"/":

scope "/", PhoenixChina dopipe_through [:browser, :browser_session, :admin_browser_session]get "/", PageController, :index

以上代码表示当浏览器访问路径"/"时, 将会调用PageController中的:index函数.

Mr.conn 往 controller 文件走去, 却被叫住了, 原来还要先经过pipi_through [...]中的一系列手续, 例如:

  pipeline :browser doplug :accepts, ["html"]plug :fetch_sessionplug :fetch_flashplug :protect_from_forgeryplug :put_secure_browser_headersend

进入控制器

"哎!你是来找我的吗?" ,一走进 page 控制器, Mr.conn 就看到有人拿着一大包东西朝他走来. "我就是 :index 啊, 等你好久了. 喏, 这些东西麻烦你帮我送到 templates/page 那里.我的兄弟 index.html 会好好招待你的."

def index(conn, %{"label" => label} = params) doquery = Post|> order_by(desc: :is_top, desc: :latest_comment_inserted_at)|> preload([:label, :user, :latest_comment, latest_comment: :user])query = case PostLabel |> Repo.get_by(content: label) donil -> querylabel_res -> query |> where(label_id: ^label_res.id)endpagination = query|> Repo.paginate(params)labels = PostLabel|> where(is_hide: false)|> order_by(:order)|> Repo.alluser_count = Repo.one(from u in User, select: count(u.id))post_count = Repo.one(from p in Post, select: count(p.id))comment_count = Repo.one(from c in Comment, select: count(c.id))conn|> assign(:current_label, label)|> assign(:labels, labels)|> assign(:pagination, pagination)|> assign(:user_count, user_count)|> assign(:post_count, post_count)|> assign(:comment_count, comment_count)|> render("index.html")end

Mr.conn 只好拿过包裹, 低头一看, 里面东西还真不少: 标题, 页码... 可是都杂乱地堆在一起. 告别了:index, Mr.conn 背着包裹向 templates/page 文件前进.

渲染页面

到了 templates/page, Mr.conn 却见到了两个人. "你好, 我是 index.html, 全名是 index.html.eex , 旁边这位是来自 views 的page_view.ex. 他负责page 旗下所有页面的渲染工作." Mr.conn 和他们俩握了握手.

"东西都带来了吗?" 'page_view.ex' 问到.

"带来了, 冒昧地问一句, 这些东西有什么用?"

"它们是 MVC 中的 M, 也就是 Model. 平常存储在数据库里, 渲染页面时需要的话就拿出来用. 什么? 你连 MVC 是什么都不知道? 亏你还走了这么远的路. MVC 是一种用来实现用户接口的设计模式, V 就是view(视图), 也就是我们现在要做的. C 指的是 controller(控制器), 你之前去过的."

"哦哦..明白了." Mr.conn 有点脸红, 突然又想起了什么 "那我呢, 我是 MVC 里的什么?"

"你呀, 就是个跑腿的. 待会儿用户点击链接, 你又要到 router 那儿领任务啦."

"..." Mr.conn陷入了深深的沉思.

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

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

相关文章

网站分析的最基本度量

网站分析的最基本度量(1)——Visit Visit,汉语翻译过来是“访问”。一个网站(Web Site)就好像一个大厦,里面有很多个不同内容的房间(Page)。你若是进了这个大厦,就是一个…

部分网站为什么上不去_喀什品牌网站建设定制-AI优网络

一个优质的营销型网站应具有简单易用、功能强大、扩展性好、安全性高、稳定性好、内置高性能搜索引擎推广技术的特点。细节决定成败,一直是我们惠州道腾网络科技的座右铭。那么网站建设找遵义微红就对了。您的网站交给我们,放心,舒心&#xf…

谈谈网站静态化

写在前头 静态化是解决减轻网站压力,提高网站访问速度的常用方案,但在强调交互的We2.0 时代,对静态化提出了更高的要求,静态不仅要能静,还要能动,下面我通过一个项目,谈谈网站静态化后的架构设计方案,同时和大家探讨一下,在开源产品大行其道,言架构必称MemberCache, Nginx,的时…

asp判断是否移动端_如何判断网站SEO优化的标准?

一,重形式我们知道,目前使用seo优化推广软件,查询的相关权重主要分为以下两种情况:1.PC端BR如果你发现一个网站的PC端BR值非常高,即使在一定时期内,权重也呈线性上升,那么很明显这个网站一定有大…

服务器打开很慢,网站打开很慢是什么原因?服务器卡该如何解决?

服务器操作卡是啥原因?服务器运行卡咋整?服务器卡死该如何处理? 在使用服务器的过程中,你是否经常会遇到以上的问题,让人有些头疼~~~ 那接下来跟着华仔的步伐,一起来看下如何解决服务器操作卡的问题&…

怎么计算网站流量?

如何计算网站的流量呢?在这华仔给大家分享一个如何计算流量的算法: 举个栗子:1G1024M,10G就是101024M10240M. 一个1M的文件被下载1000次的流量约为1G;被下载10000次的流量约为10G. 假如你每月的网站流量为10G,那10G的流…

色彩飞扬!20个色调丰富的时尚网站设计

将色彩搭配发挥得淋漓尽致!掌握了色彩搭配基础功的同学,是时候来进阶咯。今天这组网站以多彩多姿见长,配色豪迈大气,放浪形骸,是色彩灵感爆发的绝佳集聚地,还在改稿的同学,来给自己一个头脑风暴…

想学网站运营?我教你啊!(上)

创见干货: 网站如何经营,流量如何拉动,点击率如何获取,这些问题似乎从互联网诞生之日就出现了。然而关于它们的答案总是在不断更新。如今,传统媒体报业都在经受新媒体的冲击和挑战,如何去适应一个全新的&am…

ASP.NET MVC网站在opera mobile emulator中浏览

众所周知,ASP.NET MVC4有一个Moblie Application,我们都可以通过这个来开发手机网站,当然为了简单,也可以在一般的MVC中的View下面加个后缀mobile,形如Index.mobile.cshtml。可能大部分人调试这样的手机站都是用浏览器…

静态网站生成器(开源项目)

将动态网页静态化,可以有效减轻服务器端的压力,并且静态网页的访问速度要快于动态网页。此外,使用静态网页还有利于搜索引擎的收录,从而提高网站的搜索排名。下面是StaticSiteGenerators网站收集整理的开源的静态网站生成器&#…

10种AJAX/JavaScript特效实例让你的网站更吸引人

1.GreyBox   GreyBox 允许你以模式窗口的形式运行其它网站(类似于弹出式窗口,但又不运行新的浏览器窗口).如果你的网站上有一些其他网站的导出链接,但你又不想让你的用户离开你的网站或不想让他们打开另一个浏览器窗口的话,这真的是一个…

php网站安装向导下载,PHP安装向导 引导用户安装源码

作为一名伪phper,肯定少不了自己开发web系统项目。如果项目是面向大众的,需要他人安装你的产品,不可缺少的就是需要弄个安装向导,这样才能让他们简单轻松的安装你的产品。如果你觉得没必要,觉得写个文档教程就可以&…

Apache 降权 禁用php,网站降权的解决方法是什么

网站降权的解决方法是:1、定时定点更新内容,并持续增加数量;2、外链的平台要多样性;3、避免网站中出现过多的重复内容;4、保证网站健康、安全、合乎法律法规。一、网站降权网站降权的现象:1、收录减少2、关…

多人维护一份文档必须知道的管理网站-接口的github

传统维护文档方式1.word格式文档2.在线markdown文本 API管理的痛点 API接口在设计时往往需要编写大量的文档,而且编写完成之后还会经常改动,文档编写维护工作量大。接口文档编写好后,实际的代码可能会与文档有出入,这个时候文档是…

前端开发学习网站

1、http://www.runoob.com 转载于:https://www.cnblogs.com/goodboy-heyang/p/4678600.html

apache virtualhost配置 apache配置多个网站

第一步 apache下httpd.conf文件 启用模块LoadModule vhost_alias_module modules/mod_vhost_alias.so 第二步 apache下httpd.conf文件&#xff0c;启用文件Virtual hosts# Virtual hostsInclude conf/extra/httpd-vhosts.conf NameVirtualHost *:80 <VirtualHost *:80> D…

120行代码爬取电子书网站

无聊的练习。。。貌似网站真的有毒&#xff0c;我的电脑多了一个广告。。。fuck 换做好几年前我们看电子书都是在网上下载txt文件的书籍&#xff0c;现在各种APP阅读软件实在方便太多。 那么txt的文件就没用了吗&#xff1f;不呀&#xff0c;可以下载放kindle阅读呀&#xff0…

前台模板 海豚php_WP网站模板开发中,怎样给分类目录添加SEO标题和关键词?

作为一个wordpress网站的站长&#xff0c;都希望自己的网站在百度或谷歌搜索引擎上的排名好。这时&#xff0c;我们除了要做好wordpress网站的内容之外&#xff0c;还要对wordpress网站做好相关的SEO优化。在前面的章节中&#xff0c;我们介绍了wordpress网站首页的SEO优化&…

静态资源文件自动压缩并替换成压缩版本(大型网站优化技术)

原文:静态资源文件自动压缩并替换成压缩版本&#xff08;大型网站优化技术&#xff09;这一次&#xff0c;我总结和分享一项大型网站优化技术&#xff0c;那就是在项目中自动压缩静态资源文件&#xff08;css、js&#xff09;&#xff0c;并让网站自动加载压缩后的资源文件。当…

临阵磨枪,血拼季网站优化的最后三板斧

2019独角兽企业重金招聘Python工程师标准>>> 【编者按】本文作者 Dennis Callaghan 目前就职于 Callaghan&Partners。本文中&#xff0c;作者分享了购物高峰期提高网站性能的三个建议&#xff0c;帮助电商网站解决性能难题&#xff0c;提升用户体验&#xff0c;…