DjangoRestFramework和Vue做一个简单的前后端分离的博客项目(一)

一. 项目目标

在这里插入图片描述
我们需要使用djangorestframwork和vue来实现博客的增删改查(crud)。

二. 步骤

(一) 后端

  1. 创建django项目
  2. 添加博客model,并添加一些原始数据
  3. 使用rest framework来添加serializer, viewset和urls
  4. 配置settings.py并使用cors headers解决跨域的问题

(二) 前端

  1. 安装node vue
  2. vue-cli创建前端项目
  3. 修改index.html主页,添加bootstrap css框架和fontawesome字体的依赖
  4. 修改App.vue和核心组件
  5. 添加axios http请求组件
  6. 添加请求后端代码

三. 具体操作

(一) 后端

  1. 创建django项目和app

    # 创建backend项目
    django-admin startproject backend
    
    cd backend
    # 创建blogapp
    python manage.py startapp blogapp
    

    在settings.py里面加入blogapp和rest_framework

    INSTALLED_APPS = [
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'rest_framework',
     'blogapp',
    ]
    
  2. 添加博客model,并添加一些原始数据

    from django.db import models
    
    # Create your models here.
    class Blog(models.Model):
        title = models.CharField(max_length=50)
        content = models.CharField(max_length=500)
        class Meta:
            db_table = 't_blog'
            ordering  = ('-id',)
    

    ​ 在这个model里面,我们定义了两个字段,title和content, 在嵌套类里 面, 我们使用db_table属性来定义这个表的名字为t_blog, 排序 使用 ordering属性使它 按id 序排序。

    ​ 修改完models.py之后需要迁移数据库:

    python manage.py makemigrations
    python manage.py migrate
    

    ​ 使用navicat打开db.sqlite3并往表里面添加数据。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7lhtgvdE-1590294589844)(C:\Users\May天\AppData\Roaming\Typora\typora-user-images\image-20200524093157780.png)]

  3. 使用rest framework来添加serializer, viewset和urls

    在blogapp文件夹下创建一个名为serializers.py的文件作为我们的序列器文件,此时的是文件树如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tstj2Rqj-1590294589845)(C:\Users\May天\AppData\Roaming\Typora\typora-user-images\image-20200524093544954.png)]

    blogapp/views.py

    from django.shortcuts import render
    
    # Create your views here.
    from rest_framework import viewsets
    from blogapp.serializers import BlogSerializer
    from blogapp.models import Blog
    
    class BlogViewSet(viewsets.ModelViewSet):
        """
        查看,编辑博客的API接口 
        """
        queryset = Blog.objects.all()
        serializer_class = BlogSerializer
    

    blogapp/serializers.py

    from blogapp.models import Blog
    from rest_framework import serializers
    
    class BlogSerializer(serializers.HyperlinkedModelSerializer):
       class Meta:
           model = Blog
           fields = ('id', 'url', 'title', 'content')
    
    

    backend/urls.py

    from django.contrib import admin
    # from django.urls import url, include
    from django.conf.urls import url, include
    
    from rest_framework import routers
    from blogapp import views
    
    
    router = routers.DefaultRouter()
    router.register(r'blog', views.BlogViewSet)
    
    
    urlpatterns = [
        url('admin/', admin.site.urls),
        url(r'^', include(router.urls)),
        url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    ]
    

  4. 配置settings.py并使用cors headers解决跨域的问题
    INSTALLED_APPS里面加入corsheaders

    INSTALLED_APPS = [
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      'corsheaders',
      'rest_framework',
      'blogapp',
    ]  
    

​ 在MIDDLEWARE里面加入corsheaders.middleware.CorsMiddleware

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]


配置好上面的文件:启动项目就可以了

python manage.py runserver

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLjfJPqG-1590294589847)(C:\Users\May天\AppData\Roaming\Typora\typora-user-images\image-20200524121955574.png)]

项目代码奉上:https://github.com/Ran-oops/Django-Vue-Project.git


后端就基本实现了,接下来我们要实现前端页面展示:
https://blog.csdn.net/weixin_46129834/article/details/106313806

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的前后分离websocekt的demo项目,使用SpringBoot作为后框架,Vue作为前框架。 1. 后代码 在SpringBoot中,我们使用Spring WebSocket模块来实现WebSocket功能。首先,我们需要添加以下依赖到我们的pom.xml文件中: ``` <!-- Spring WebSocket --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 然后,在我们的SpringBoot主类中,添加@EnableWebSocket注解,启用WebSocket功能: ``` @SpringBootApplication @EnableWebSocket public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 接下来,我们创建一个WebSocket处理器类,处理WebSocket连接的建立、关闭和消息发送: ``` @Component public class WebSocketHandler extends TextWebSocketHandler { private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketHandler.class); private List<WebSocketSession> sessions = new ArrayList<>(); @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { LOGGER.info("WebSocket session opened: " + session.getId()); sessions.add(session); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { LOGGER.info("Received message: " + message.getPayload()); for (WebSocketSession s : sessions) { s.sendMessage(message); } } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { LOGGER.info("WebSocket session closed: " + session.getId()); sessions.remove(session); } } ``` 这个处理器类继承自TextWebSocketHandler,重写了三个方法: - afterConnectionEstablished:当WebSocket连接建立时调用,将当前连接添加到sessions列表中; - handleTextMessage:当收到文本消息时调用,遍历sessions列表,向所有连接发送消息; - afterConnectionClosed:当WebSocket连接关闭时调用,将当前连接从sessions列表中移除。 最后,我们在配置类中添加WebSocket配置: ``` @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Autowired private WebSocketHandler webSocketHandler; @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(webSocketHandler, "/websocket").setAllowedOrigins("*"); } } ``` 这个配置类使用@Autowired注解注入WebSocket处理器,并将处理器注册到“/websocket”路径下。 2. 前代码 在Vue中,我们使用Vue-WebSocket插件来实现WebSocket功能。首先,我们需要使用npm安装Vue-WebSocket插件: ``` npm install --save vue-native-websocket ``` 然后,在我们的Vue组件中,引入Vue-WebSocket插件,连接WebSocket服务器: ``` <template> <div> <input type="text" v-model="message"> <button @click="send">Send</button> <ul> <li v-for="msg in messages">{{ msg }}</li> </ul> </div> </template> <script> import VueNativeSock from 'vue-native-websocket' export default { data() { return { message: '', messages: [] } }, mounted() { this.$connect('ws://localhost:8080/websocket') this.$on('message', message => { this.messages.push(message.data) }) }, methods: { send() { this.$socket.send(this.message) this.message = '' } }, destroyed() { this.$disconnect() }, sockets: { open() { console.log('WebSocket connected') }, close() { console.log('WebSocket disconnected') } } } </script> ``` 这个Vue组件使用VueNativeSock插件连接到“ws://localhost:8080/websocket”路径下的WebSocket服务器,并监听“message”事件,将收到的消息添加到messages数组中。同时,它也提供了一个输入框和一个发送按钮,点击发送按钮后,将输入框中的内容发送给服务器。 3. 整合前后代码 我们将后代码打包成jar包,并启动服务器。然后,在Vue项目中,使用vue-cli-service serve命令启动开发服务器,将Vue组件打包成前页面。 在前页面中,我们使用WebSocket连接到后服务器,并通过Vue-WebSocket插件监听WebSocket消息。当用户输入消息并点击发送时,将消息发送到后服务器,后服务器将消息发送给所有连接的。 这样,我们就完成了一个简单的前后分离WebSocket的demo项目

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值