2019-08-08 Django+Vue.js实现前后端分离的单页面博客系统(1)项目的构建

写在前面的话

自从写完那个PHP项目之后就一直处于很颓废的状态。今天把Vue.js学的差不多了,终于决定要开始做这个项目了。

这个开发任务是小组布置的另一个任务。今天刚把Django官方文档里那个入门项目做完,我就感觉到Django这个东西一点也不简单,而我要写的这个项目更不简单。虽然配合vue-cli实现前后端分离并且做成单页面应用可以降低后端开发的难度——后端只用管数据处理、存储就可以了,其他的都交给前端,博客系统也没有特别复杂的后端逻辑,而且自己也经常用Python写一些脚本,对这门语言还算熟悉。但是……毕竟这东西不像PHP那么简单,也没用它进行过后端开发,一时半会肯定是学不完的了……

最近刚刚接触了vue-cli,感觉这个东西还挺神奇的,似乎也非常好用,对提高网站的性能应该是有很大的帮助。虽然学Vue学了有一段时间了,也用Vue写过一部分页面,自己也非常喜欢这个框架,但是使用vue-cli做单页面应用,这还是第一次。单页面应用、前后端分离、Ajax,几乎全都是我的知识盲区。但是毕竟自己喜欢前端开发,单页面应用和前后端分离是以后的主流,所以就硬着头皮决定用这样的方式搭建这个项目了。毕竟,没有学习就没有进步嘛,如果因为害怕难而不去学、不去做,又哪来的进步呢。

这次肯定不会像上次那个PHP前后端不分离的项目一样那么快就完成,规划的是15天左右,在8月25日之前完成就可以了,不过具体需要多少天……我心里也没底,毕竟是第一次做这样的项目,而且网上也没有很多可参考的资料。不像PHP随便一搜就是一大堆,还得为参考哪个更好而发愁,这次是有相关资料就不错了。。。

因为这个项目的前端是vue-cli做的单页面应用,重点在前端的数据处理、渲染、用户交互等方面,所以页面的设计与美化我也不是很想花太大力气了,决定使用Bootstrap框架配合少量的手写完成对前端的美化。还不是因为MDUI实在是看腻了又不想手写才会考虑Bootstrap。。。

所以最后其实是打算边做这个项目边学习Vue.js和Django

需要用到的知识点

后端

  • Python
  • Django
  • 跨域、Django的CSRF token等

前端

  • Bootstrap
  • Vue.js
  • vue-cli
  • vue-router
  • Vue.js组件化开发
  • Ajax
  • 前后端分离
  • 单页面应用(SPA)的开发

开发工具

后端

  • PyCharm

前端

  • IntelliJ IDEA(装了Vue的插件并进行了相关设置)
  • Visual Studio Code

项目的总体逻辑

如果不考虑评论功能的话,登录到博客系统的用户只有一个,那就是博主本人,所以用户管理方面不是很复杂,可以不设置注册页面而只有登录页面,在设置数据库的时候加上博主这个用户就可以,前端也可以没有登录按钮,以输入url的方式跳转到登录组件(少一个按钮肯定是美观一些)。复杂的地方还是在于前端不同组件之间的逻辑与数据的请求、渲染问题。

初步设想整个系统的前端由以下组件组成,比留言板项目的逻辑还是简单一些:

数据库方面,感觉Django自带的SQLite似乎很好用,虽然对它不如对MySQL熟悉,但是还是决定用它,也省去一些配置上的麻烦。具体怎么用还是需要继续摸索。

项目的建立

首先建立整个项目:

django-admin startproject Blog

后端

cd Blog
python manage.py startapp backend

前端

vue-init webpack frontend
cd frontend
npm install

前端一些需要用到的库

Bootstrap4

npm install bootstrap --save --save-exact

Ajax

npm install axios vue-axios --save --save-exact

打包Vue项目

主要是为了生成index.html,方便Django中的设置。

npm install
npm run build

Django视图、静态文件搜索路径配置

参考:
http://blog.csdn.net/liuyukuan/article/details/70477095
http://blog.csdn.net/qq_39785489/article/details/82751868

因为是单页面应用,所以也就只有一个index.html,配置一下即可。

Blog/urls.py

from django.contrib import admin
from django.urls import path
from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name='index.html'))    #默认访问index.html
]

Blog/settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['frontend/dist'],    #添加
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 添加以下项
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'frontend/dist/static')
]

解决跨域问题

参考: https://blog.csdn.net/ros_donggua/article/details/82800510

在开发前端时使用npm run dev命令,在请求Django的接口时可能会出现跨域问题。

安装django-cors-headers:

pip install django-cors-headers

我这里是直接就有了,不需要安装。

Blog/settings.py

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',
]

CORS_ORIGIN_ALLOW_ALL = True    #添加这一行

启动项目

python manage.py runserver

访问127.0.0.1:8080,就可以看到Vue.js的默认页面了,也代表项目基本构建完成,可以进行后续的开发了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345