推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 生物信息与python > .net MVC Framework与django两种web框架的对比和一点理解

.net MVC Framework与django两种web框架的对比和一点理解

生物信息与python 2018-10-23

这篇文章不涉及到具体的代码实现,主要讲一下大致思路。

mvc框架其实用过django之后就很容易理解了。无非就是讲复制的系统分为control,model,view三层,每层处理不同的部分。

  • 首先用vs2017创建一个.net mvc框架,

可以看见vs已经自动帮我们搭建好了基本框架。

在App_start中有一个routeconfig.cs,这个就是路由配置文件: ``` namespace test { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

`` 可以看见,.net的路由配置,默认是controller/action/id`,实际上也就是以demoController中的demo,加上该类中的不同方法action,以及参数名id,作为默认的路由。当匹配到这个路由时,很明显,使用.net的url的默认规则时,将能够很容易的发现我需要使用的视图和获取到的参数。(当然这里是可以进行更改的)

这里值得与django对比一下,可以发现在django中的路由配置,使用url()函数,当传入不同的url时,会将获取的参数传递给不同的视图函数,当然叫做视图函数,实际上可以是基于函数试图,也可以是基于类视图。之后视图将结果返回给templates。

比如我们来实验一下: 在controller中新建一个HelloWorldController,写入如下代码:

public class HelloWorldController : Controller
    {
        // GET: HelloWorld
        public ActionResult Theme()
        {
            ViewBag.title = "一个测试";
            return View();
        }
    }

基本的c#语法就不在这里说了,其中actionresult是一个派生类,用来返回controller中的request处理结果。 这里我也与django比较一下,很容易发现,这里的actionresult与django视图中的render和redirect有相同的感觉。

viewbag简单的理解,就是可以用来处理一些参数,然后将它返回给view中。

可以看见,我们最后返回了一个view,那么这个view就需要我们去views进行code。 在theme.cshtml中初始化之后,可以看见如图:

.net MVC Framework与django两种web框架的对比和一点理解


这里的Layout其实就是基础模板,也其实就是django中的base.html,这里的语法是Razor的语法,个人理解就是为了让c#在thml中能够生效而衍生的一个语法规则,和c#差不太多。

为了更好的理解模板继承,我们可以去看看_layout.cshtml.


这里简单介绍一下,.net的模板继承规则: 在views中会有一个_viewstart.cshtml的文件,实际上,在views中其他所有的cshtml加载之前都会加载它,在这里可以写入一些所有模板都需要的规则,其中还有一个shared文件夹,里面放的是一些能够共享模板文件。所有的控制器都能够使用。_layout.cshtml就包括在其中。


查看_layout.cshtml源文件可以发现: 在.net中,有三种继承方式: 1. RenderBody 2. RenderPage 3. RenderSection

这三种render的各自功能分别是: renderbody,能够直接将子模板中的内容合并到_layout.cshtml中的renderbody的位置,在子模板中不需要任何的code,可以直接继承。 renderpage("需要插入的cshtml"),renderpage是能够在模板中进行加入操作。 @rendersection(“name”,required:false) 在需要的部分进行插入自己所需要的节。当使用的时候,@section name{内容}

.net的这个特性,我不知道是好还是坏,应该是c#语言的特性,在django我们只需要{%block name%}就可以对所有情况进行判断。从实用的角度来讲,我个人认为django的继承规则要更加简单

我们来进行一个简单的操作: 当在theme.cshtml中什么也不写的时候,可以发现renderbody缺失时,并不会出现任何的异常。


当我在controller中调用@section test{<p>你好,世界!</p>} 可以发现,能够成功实现,



这里再介绍一下加入超链接的方法: @html.actionlink("name","action","controller","params","css属性")

例如 @html.actionlink("我的主页","theme","Themecontroller",new {id=1},new {target="_blank",@class="title"})

其实这里的超链接的写法,在django中我们可以直接使用{%url 'namespace' %}来表示,也十分的简单


我的博客:echor'blog


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《.net MVC Framework与django两种web框架的对比和一点理解》的版权归原作者「生物信息与python」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注生物信息与python微信公众号

生物信息与python微信公众号:Bio_and_python

生物信息与python

手机扫描上方二维码即可关注生物信息与python微信公众号

生物信息与python最新文章

精品公众号随机推荐