D语言怎么创建一个blog项目

本篇内容介绍了“D语言怎么创建一个blog项目”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联是一家集网站建设,边坝企业网站建设,边坝品牌网站建设,网站定制,边坝网站建设报价,网络营销,网络优化,边坝网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

1.首先拉取skeleton项目为基础,文件命名为myprogect

git clone https://github.com/huntlabs/hunt-skeleton.git myproject
cd myproject
dub run -v

2.修改项目中config下的application.conf文件中关于数据库的相关配置

hunt.database.default.driver=MySQL
hunt.database.default.host=127.0.0.1
hunt.database.default.port=3306  //接口
hunt.database.default.database=myblog //数据库名称
hunt.database.default.username=root //数据库用户名
hunt.database.default.password=     //数据库密码
hunt.database.default.charset=utf8  
hunt.database.default.prefix=
hunt.database.default.enabled=true

3.首先实现Blog项目后台管理;确定项目后台功能并在config下创建admin.routes文件定义路由

GET /user/list user.users //用户列表页面

*  /user/add  user.add   //用户添加操作

GET  /user/delete  user.remove  //用户删除操作

GET  /user/update  user.update  //用户修改页面

POST  /user/doup  user.doupdate  //用户修改操作

GET /blog/list blog.blogs   //文章列表页面

* /blog/add blog.add    //文章添加页面

POST /blog/doadd/ blog/doadd  //文章添加操作

4.在source--app下建立Blog模块;在Blog中新建一个model模型,在model下创建Blog.d以及User.d文件,用来存放对应数据表中的数据;

//Blog.d
module app.blog.model.Blog;                     
import hunt.entity;
import app.model.User;

@Table("blog")
class Blog : Model
{
    mixin MakeModel;

    @AutoIncrement
    @PrimaryKey
    int id; //主键,自动增长

    long created;  //时间
    
    string title;  //文章标题
    
    string description;  //描述
  
    string picture;  //图片

    string  content; //内容
    
    @OneToOne()
    @JoinColumn("user_id")
    User  user;//通过user_id关联User表
}

//User.d
module app.blog.model.User;
import hunt.entity;

@Table("user")
class User : Model 
{
    mixin  MakeModel;

    @AutoIncrement
    @PrimaryKey
    int id;

    string username;  //用户名

    string password;  //密码
    
    string email;  //邮箱
}

5.以model为基础;在source--app--blog下新建repository文件,创建相应的BlogRepository.d、UserRepository.d文件;对数据进行操作

//BlogRepository.d
module app.blog.repository.BlogRepository;
import app.blog.model.Blog; 

import hunt.entity;
class BlogRepository : EntityRepository!(Blog , int){
}

//UserRepository.d
module app.blog.repository.UserRepository;
import app.blog.model.User; 

import hunt.entity;
class UserRepository : EntityRepository!(User,int){
}

6.在source--app--blog下新建admin文件,在admin中创建BlogController.d、UserController.d来实现后台管理;包括文章的管理以及对用户的浏览、添加、删除、修改

//BlogController.d
module app.blog.controller.admin.BlogController;
import hunt.framework;
import app.blog.form.BlogForm;
import app.blog.model.Blog;
import app.blog.repository.BlogRepository;
import app.blog.repository.UserRepository;

class BlogController : Controller
{
    mixin MakeController;
    
    //文章的添加
    @Action
    string add(BlogForm form)
    {
        if(request.method == HttpMethod.POST)
        {
            auto result = form.valid();
            if(result.isValid)
            {
                auto blog = new Blog ;
                blog.title = form.tit;
                
                blog.description = form.dept;
                blog.picture = form.pic;
                blog.content = form.cont;
                blog.created = time();
                
                auto repo = new BlogRepository;
                repo.save(blog);

                return "successed!";
            }
            view.assign("messages", result.messages());
        }
        view.assign("blog", (form is null) ? new BlogForm : form);
        view.assign("users", (new UserRepository).findAll());//查出User的全部信息

        return view.render("blog_add");
    }
    
    //文章列表浏览
    @Action
    string  blogs()
    {
        auto repo = new BlogRepository;

        auto blogs = repo.findAll();//查找全部文章信息

        view.assign("blogs",blogs);

        return view.render("blog_list");//跳转到列表页面
    }
}
//UserController.d
module app.blog.controller.admin.UserController;
import hunt.framework;
import app.blog.form.UserForm;
import app.blog.model.User;
import app.blog.repository.UserRepository;

class UserController : Controller
{
    mixin MakeController;
    
    //用户添加
    @Action
    string add(UserForm form)
    {
        if (request.method == HttpMethod.POST)
        {
            auto result = form.valid();
            if(result.isValid)
            {
                auto user = new User;
                user.username = form.um;
                user.password = form.pwd;
                user.email = form.mail; 

                auto repo = new UserRepository;
                repo.save(user);

                 return "successed";
            }
            view.assign("messages",result.messages());
        } 
        view.assign("user",(form is null) ? new UserForm : form);
        return view.render("user_add");
    }

    //用户列表浏览
    @Action
    string  users()
    {
        auto repo = new UserRepository;

        auto users = repo.findAll();

        view.assign("users",users);

        return view.render("user_list");
    }
    
    //用户删除操作
    @Action
    string remove(int id)
    {
        auto repo = new UserRepository;

        repo.removeById(id);//根据id删除用户信息

        return "deleted";
    }
    
    //用户修改列表
    @Action
    string update(int id)
    {
        auto repo = new UserRepository;

        auto user = repo.find(id);//通过id查找要修改的信息

        view.assign("user",user);

        return view.render("user_up");//跳转到修改页面
    }
    //用户修改操作
    @Action
    string doupdate(UserForm form)
    {
        auto repo = new UserRepository;
        auto user = repo.find(form.id.to!int);

        user.username = form.um;
        user.password = form.pwd;
        user.email = form.mail;//进行修改操作
        repo.save(user);//保存

        return "successed";
    }
}

7.在view下新建admin,在admin中新建header.html、footer.html、sidebar.html显示列表以及目录的CSS样式;blog_list.html、blog_add.html、user_add.html、user_list.html、user_up.html来实现功能列表;显示部分代码

//blog_list.html

      
        
        
          title
          name 
          description
          picture
          content
          
        
        
        {% for blog in blogs %}
        
        
          {{ blog.title }}
          {{ blog.user.username}}
          {{ blog.description }}
          {{ blog.picture }}
          {{ blog.content }}  Read Full
      
        
        
        {% endfor %}
    
        
        
            title
            name
            description
            picture
            content
          
        
        
      
//blog_add.html

    
    {% if messages %}
    
      
            {% for key, message in messages %}         
  • {{ key }} : {{ message }}
  •         {% endfor %}       
    
    {% endif %}              title               
               name                    -- 请选择 --           {% for user in users %}             {{ user.username }}           {% endfor %}                
                      description                                picture                                content                                      添加文章     
//user_add.html

  
    
      {% if messages %}
        
          
                {% for key, message in messages %}             
  • {{ key }} : {{ message }} 
  •             {% endfor %}           
                 {% endif %}                    Username                                        Password                                        Email address                                          添加用户        
//user_list.html

  
    
    
      username
      email
      Delete
      Update
    
    
    {% for user in users %}
    
    
      {{ user.username}}
      {{ user.email}}
      Delete
      Update
    
    
    {% endfor %}

    
    
      username
      email
      Delete
      Update
    
    
  
//user_up.html

    
    

Username:

    

Password:

    

Email:

    

 

8.在source--app--blog下新建form文件,创建form表单BlogForm.d、UserForm.d文件;与模板页中name的字段值一致;并定义字段的范围;

//BlogForm.d
module app.blog.form.BlogForm;
import hunt.framework;

class BlogForm : Form
{
    mixin MakeForm;

    string id; 

    string uid; //与User表关联的user_id

    @NotEmpty  //name的值不能为空
    string nm;

    @Length(6,18)  //title的值在6到18位之间
    string tit;

    @Length(10,100) //description的值在10到100位之间
    string dept;

    string pic; //图片

    @Length(10,200) //content的值在10到200位之间
    string cont;
}
//UserForm.d
module app.blog.form.UserForm;
import hunt.framework;

class UserForm : Form
{
    mixin MakeForm;
    
    string id;
    
    @Length(3, 18) //用户名的值在3到18位之间
    string um;

    @Length(6, 16) //密码的值在6到16位之间
    string pwd;

    @Length(6, 32) //邮箱的值在6到32位之间
    string mail;
}

9.进行Blog项目的前台管理;确定前台能够实现的功能,在config下的routes中定义路由

GET   /add  blog.add  //文章添加页面

POST  /blog/add  blog.doadd  //文章添加操作

GET   /blog/delete  blog.remove  //文章删除操作

GET  /blog/list   blog.blogs  //文章列表浏览页面

POST  /blog/doup  blog.doupdate  //文章修改操作

GET  /blog/update   blog.update  //文章修改页面

10.在source--app--controller下创建BlogController.d文件,实现Blog前台管理包括浏览,添加,修改,删除功能

module app.blog.controller.BlogController;
import app.blog.form.BlogForm;
import app.blog.model.Blog;
import app.blog.repository.BlogRepository;
import hunt.framework;

class BlogController : Controller
{
    mixin MakeController;
    //文章添加
    @Action
    string add()//跳转到添加页面添加
    {
        return view.render("blog_add");
    }
    @Action
    string doadd(BlogForm form)//添加操作
    {
        auto blog = new Blog ;
        blog.title = form.tit;
        blog.description = form.dept;
        blog.picture = form.pic;
        blog.content = form.cont;
        blog.created = time();//时间为当前时间

        auto repo = new BlogRepository;
        repo.save(blog);//保存

        return "successed!";
    }
    //文章列表
    @Action
    string  blogs()
    {
        auto repo = new BlogRepository;

        auto blogs = repo.findAll();//查找所有的文章信息

        view.assign("blogs",blogs);

        return view.render("blog_list");//跳转到列表页面
    }
    //文章删除
    @Action
    string remove(int id)
    {
        auto repo = new BlogRepository;

        repo.removeById(id);//通过id删除文章信息

        return "deleted";
    }
    //文章修改
    @Action
    string update(int id)//修改页面
    {
        auto repo = new BlogRepository;

        auto blog = repo.find(id);//通过id查到需要修改的文章信息

        view.assign("blog",blog);

        return view.render("blog_up");//跳转到修改页面
    }

    @Action
    string doupdate(BlogForm form)//修改操作
    {
        auto repo = new BlogRepository;
        auto blog = repo.find(form.id.to!int);

        blog.title = form.tit;
        blog.description = form.dept;
        blog.picture = form.pic;
        blog.content = form.cont;//进行修改操作

        repo.save(blog);//保存
        return "successed";
    }
}

11.在views下的default中创建footer.html,header.html用来储存模板页中的CSS样式,blog_add.html, blog_up.html,blog_list.html分别显示blog添加,修改,列表模板页;

//blog_list.html

{% include "header.html" %}
  
  

    

      
      

        Page Heading
          Secondary Text
        

        {% for blog in blogs %}
        
        
          
          
            {{blog.title}}
            {{blog.description}}

            Read More →                                   Posted on {{ date("m-d H:i:s",blog.created)}}             {{blog.user.username}}                             {% endfor %} {% include "footer.html" %}
//blog_add.html

    
        
            

Name:

            

Title:

            

Description: 

            

Picture: 

            

Content: 

            

             
//blog_up.html

    
    

Name:

    

Title:

    

Description: 

    

Picture: 

    

Content: 

    

“D语言怎么创建一个blog项目”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网页标题:D语言怎么创建一个blog项目
分享地址:http://hbruida.cn/article/jspigo.html