Nancy简单实战之NancyMusicStore(一):准备工作和搭建项目

简介: 原文:Nancy简单实战之NancyMusicStore(一):准备工作和搭建项目开发环境 OS : Windows 10 10.0.14393 IDE : Visual Studio 2015 Community With Update 3 Database : PostgreSQL 9.
原文: Nancy简单实战之NancyMusicStore(一):准备工作和搭建项目

开发环境

OS : Windows 10 10.0.14393

IDE : Visual Studio 2015 Community With Update 3

Database : PostgreSQL 9.6

DBMS :pgAdmin 4

迁移数据与配置PG远程访问

MVC MusicStore中的数据分为两部分:系统相关数据和MemberShip产生的用户数据

database

这里我们只需要系统相关的数据,Membership相关的数据就让它见鬼去吧~~

系统相关的数据是存储在SQL Server Compact,通过Database4打开这个数据库,然后将这个数据库生成相关的脚本,对这些脚本简单的修改一下,拿到pg Admin 上执行。

然后还添加了一张新的用户表,建表语句如下

CREATE TABLE public.sysuser
(
    sysuserid character varying(100) COLLATE pg_catalog."default" NOT NULL,
    sysusername character varying(100) COLLATE pg_catalog."default" NOT NULL,
    sysuserpassword character varying(100) COLLATE pg_catalog."default" NOT NULL,
    sysuseremail character varying(100) COLLATE pg_catalog."default",
    CONSTRAINT sysuser_pkey PRIMARY KEY (sysuserid)
)
WITH (
    OIDS = FALSE
)

TABLESPACE pg_default;

ALTER TABLE public.sysuser
    OWNER to dev;

数据库和数据表已经建好了,下面还要配置PG可以被远程访问,不然后面在Linux部署的时候会提示无法访问数据库。

只需要修改 pg_hba.conf 这个配置文件

直接将host all all 127.0.0.1/32 md5修改为以下配置 host all all 0.0.0.0/0 md5

如果不希望允许所有IP远程访问,则可以将上述配置项中的0.0.0.0设定为特定的IP值。

搭建项目

新建一个空的Web项目,命名为NancyMusicStore,通过Nuget添加本实战用到的相关程序集。

在Package Manager Console窗口通过安装下面的package

Install-Package Nancy -Version 1.4.3

Install-Package Nancy.Hosting.Aspnet -Version 1.4.1

Install-Package Nancy.Viewengines.Razor -Version 1.4.3

Install-Package Nancy.Authentication.Forms -Version 1.4.1

Install-Package Dapper

Install-Package Npgsql -Version 3.1.9

相关package说明:

  • Nancy 这个就不用说了,Nancy框架的根

  • Nancy.Hosting.Aspnet 项目基于ASP.NET的宿主环境的

  • Nancy.Viewengines.Razor 项目用到的模板引擎,也是我们最熟悉的Razor

  • Nancy.Authentication.Forms 项目用到的身份认证组件,替代MVC MusicStore中的Membership

  • Dapper,轻量级ORM

  • Npgsql,访问pg的驱动

添加了不少有用的东西,自然也要干掉不少没有用的东西!!

移除掉没有用到的DLL引用,具体剩下的如下图所示:

相关引用

可以看到引用十分简洁!

在项目新建两个文件夹,Content和Scripts,把需的资源文件从MVC MUSICSTORE中添加进来。

其中Content文件夹只需要下面的几个:

content

Scripts文件夹只需要下面两个:

scripts

本地的静态资源文件,不是简单的引用就能够使用的。还要在启动器中对静态资源文件的访问支持,如果不添加,资源文件就会报404的错误。

所以我们要建个启动器类:CustomBootstrapper,具体内容如下:

using Nancy;
using Nancy.Authentication.Forms;
using Nancy.Bootstrapper;
using Nancy.Conventions;
using Nancy.Session;
using Nancy.TinyIoc;
using NancyMusicStore.Common;

namespace NancyMusicStore
{
    public class CustomBootstrapper : DefaultNancyBootstrapper
    {
        protected override void ApplicationStartup(TinyIoCContainer container,IPipelines pipelines)
        {
            //Prevent errors on Linux
            StaticConfiguration.DisableErrorTraces = false;
        }
        
        protected override void ConfigureApplicationContainer(TinyIoCContainer container)
        {
            base.ConfigureApplicationContainer(container);                 
        }

        protected override void ConfigureConventions(NancyConventions conventions)
        {
            base.ConfigureConventions(conventions);
            conventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Scripts"));
            conventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Content"));
        }
    }
}

下面就建立相应的数据模型与数据库的表映射:

models

数据和模型都有了,下面就在web.config中添加pg的连接字符串:

 <connectionStrings>
     <add name="pgsqlConn" connectionString="Host=127.0.0.1;Username=dev;Password=123456;Database=nancymusicstore;" />
 </connectionStrings>

同时在项目新建一个Common文件夹,在里面添加两个公共的操作类,一个是对Dapper的简单封装DBHelper,另一个是对配置文件的封装ConfigHelper。

首先是ConfigHelper:

using System.Configuration;

namespace NancyMusicStore.Common
{
    public class ConfigHelper
    {
        public static string GetAppSettingByKey(string key)
        {
            return ConfigurationManager.AppSettings[key].ToString();            
        }

        public static string GetConneectionStr()
        {
            return ConfigurationManager.ConnectionStrings["pgsqlConn"].ConnectionString.ToString();
        }
    }
}

包含两个方法,一个读取appsetting的方法,一个是读取连接字符串的方法。主要是用了System.Configuration来处理。

然后是DBHelper:

using Dapper;
using Npgsql;
using System.Collections.Generic;
using System.Linq;
using System.Data;

namespace NancyMusicStore.Common
{
    public class DBHelper
    {
        //open connection       
        private static IDbConnection OpenConnection()
        {
            var conn = new NpgsqlConnection(ConfigHelper.GetConneectionStr());
            conn.Open();
            return conn;
        }

        //execute 
        public static int Execute(string sql, object param = null, IDbTransaction transaction = null,
            int? commandTimeout = null, CommandType? commandType = null)
        {
            using (var conn = OpenConnection())
            {
                return conn.Execute(sql, param, transaction, commandTimeout, commandType);
            }
        }

        //execute 
        public static object ExecuteScalar(string cmd, object param = null, IDbTransaction transaction = null,
            int? commandTimeout = null, CommandType? commandType = null)
        {
            using (var conn = OpenConnection())
            {
                return conn.ExecuteScalar(cmd, param, transaction, commandTimeout, commandType);
            }
        }

        //do query and return a list
        public static IList<T> Query<T>(string sql, object param = null, IDbTransaction transaction = null,
            bool buffered = true, int? commandTimeout = null, CommandType? commandType = null) where T : class
        {
            using (var conn = OpenConnection())
            {
                return conn.Query<T>(sql, param, transaction, buffered, commandTimeout, commandType).ToList();
            }
        }

        //do query and return the first entity
        public static T QueryFirstOrDefault<T>(string sql, object param = null, IDbTransaction transaction = null,
            int? commandTimeout = null, CommandType? commandType = null) where T : class
        {
            using (var conn = OpenConnection())
            {
                return conn.QueryFirstOrDefault<T>(sql, param, transaction, commandTimeout, commandType);
            }
        }
    }
}

这里只是对Dapper加了一层封装,其实是可有可无的,是为了Module里面的代码比较简洁才加的。

而且案例调用的全部是存储过程,在项目代码中看不到SQL语句,只能看到存储过程的名字。

至此,我们的准备工作和项目已经搭建好了!

下一篇将开始打造我们NancyMusicStore的首页了!

本文也已经同步到 Nancy之大杂烩

目录
相关文章
|
7月前
|
计算机视觉
YOLOv11改进策略【SPPF】| AIFI : 基于Transformer的尺度内特征交互,在降低计算成本的同时提高模型的性能
YOLOv11改进策略【SPPF】| AIFI : 基于Transformer的尺度内特征交互,在降低计算成本的同时提高模型的性能
307 9
YOLOv11改进策略【SPPF】| AIFI : 基于Transformer的尺度内特征交互,在降低计算成本的同时提高模型的性能
|
11月前
|
自然语言处理 Serverless API
基于 EventBridge + DashVector 打造 RAG 全链路动态语义检索能力
本文将演示如何使用事件总线(EventBridge),向量检索服务(DashVector),函数计算(FunctionCompute)结合灵积模型服务[1]上的 Embedding API[2],来从 0 到 1 构建基于文本索引的构建+向量检索基础上的语义搜索能力。具体来说,我们将基于 OSS 文本文档动态插入数据,进行实时的文本语义搜索,查询最相似的相关内容。
454 166
|
9月前
|
机器学习/深度学习 自然语言处理 算法
《Java 情感分析:前沿技术与方法全解析》
在数字化时代,情感分析是提取文本数据价值的关键技术。本文探讨了Java在这一领域的应用,涵盖自然语言处理工具(如Apache OpenNLP、Stanford NLP)、机器学习方法(如朴素贝叶斯、SVM)及深度学习框架(如TensorFlow、Deeplearning4j)。通过这些技术和工具,Java能够高效处理情感分析任务,广泛应用于社交媒体监测、客户反馈分析等场景,尽管仍面临文本多样性与复杂性的挑战。
317 9
|
机器学习/深度学习 算法 计算机视觉
【博士每天一篇文献-算法】持续学习经典算法之LwF: Learning without forgetting
LwF(Learning without Forgetting)是一种机器学习方法,通过知识蒸馏损失来在训练新任务时保留旧任务的知识,无需旧任务数据,有效解决了神经网络学习新任务时可能发生的灾难性遗忘问题。
890 9
|
存储 DataWorks 安全
DataWorks产品使用合集之DataWorks的任务查看上限进行配置如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
100 2
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习实践篇 第二章:transforms
简要介绍pytorch中常用的transform方法。
537 0
|
关系型数据库 MySQL 数据库
Flask-SQLAlchemy安装及设置
Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升 SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。
3029 1
|
搜索推荐 UED 数据挖掘
凤巢系统
引用:http://baike.baidu.com/view/2385746.htm 2009年4月20日,全球最大的中文搜索引擎百度正式推出搜索推广专业版,即此前受到业界广泛关注的“凤巢”推广系统。
1653 0
|
7天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1176 3
|
6天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
877 12