【问题标题】:IronPython on ASP.NET MVCASP.NET MVC 上的 IronPython
【发布时间】:2010-10-01 07:23:02
【问题描述】:

有没有人尝试过使用 IronPython 的 ASP.NET MVC?最近做了很多 Python 开发,在我进入一个潜在的 ASP.NET MVC 项目时继续使用该语言会很不错。

我对利用 .NET 功能(例如 LINQ)利用 Python 的动态方面特别感兴趣,我想知道这是否可行。对于某些动态编程可能可行的另一条路线是带有 dynamic 关键字的 C# 4.0。

想法、经验?

【问题讨论】:

    标签: python asp.net-mvc linq dynamic ironpython


    【解决方案1】:

    是的,there is an MVC example from the DLR team

    您可能还对Spark 感兴趣。

    【讨论】:

    • 链接的示例似乎是关于 WebForms 而不是 ASP.Net MVC
    • @Abhijit,不幸的是 CodePlex URL 的生命周期似乎有限。自我发布此答案以来的 2 年多时间里,他们断开了链接。
    • 有人在生产中使用它吗?
    【解决方案2】:

    在 ASP.NET MVC 中使用 IronPython:http://www.codevoyeur.com/Articles/Tags/ironpython.aspx

    此页面包含以下文章:

    • 一个用于 ASP.NET MVC 的简单 IronPython ControllerFactory
    • 一个用于 ASP.NET MVC 的简单 IronPython ActionFilter
    • 用于 ASP.NET MVC 的简单 IronPython 路由映射器
    • 用于 ASP.NET MVC 的不显眼 IronPython 视图引擎

    【讨论】:

      【解决方案3】:

      我目前正在处理这个问题。它已经支持很多东西了:https://github.com/simplic-systems/ironpython-aspnet-mvc

      更多信息:

      导入aspnet 模块

      import aspnet
      

      您可以编写自己的控制器

      class HomeController(aspnet.Controller):
      
          def index(self):
              return self.view("~/Views/Home/Index.cshtml")
      

      您可以自动注册所有控制器

      aspnet.Routing.register_all()
      

      您可以使用不同的 http 方法

      @aspnet.Filter.httpPost
          def postSample(self):
              return self.view("~/Views/Home/Index.cshtml")
      

      还有更多。这是一个非常简短的例子

      # ------------------------------------------------
      # This is the root of any IronPython based
      # AspNet MVC application.
      # ------------------------------------------------
      
      import aspnet
      
      # Define "root" class of the MVC-System
      class App(aspnet.Application):
      
          # Start IronPython asp.net mvc application. 
          # Routes and other stuff can be registered here
          def start(self):
      
              # Register all routes
              aspnet.Routing.register_all()
      
              # Set layout
              aspnet.Views.set_layout('~/Views/Shared/_Layout.cshtml')
      
              # Load style bundle
              bundle = aspnet.StyleBundle('~/Content/css')
              bundle.include("~/Content/css/all.css")
      
              aspnet.Bundles.add(bundle)
      
      class HomeController(aspnet.Controller):
      
          def index(self):
              return self.view("~/Views/Home/Index.cshtml")
      
          def page(self):
              # Works also with default paths
              return self.view()
      
          def paramSample(self, id, id2 = 'default-value for id2'):
              # Works also with default paths
              model = SampleModel()
              model.id = id
              model.id2 = id2
              return self.view("~/Views/Home/ParamSample.cshtml", model)
      
          @aspnet.Filter.httpPost
          def postSample(self):
              return self.view("~/Views/Home/Index.cshtml")
      
      class SampleModel:
          id = 0
          id2 = ''
      
      class ProductController(aspnet.Controller):
      
          def index(self):
              return self.view("~/Views/Product/Index.cshtml")
      

      【讨论】:

      • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
      • @BhargavRao 答案已改进,现在符合要求吗?
      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多