共计 5358 个字符,预计需要花费 14 分钟才能阅读完成。
环境搭建 (Windows)
创建虚拟环境
virtualenv django_env
django_envScriptsactivate # 激活虚拟环境
django_envScriptsdeactivate # 退出
依赖包安装
pip install django
pip install djangorestframework
pip install PymySQL
pip install pillow
pip install django-redis
pip list # 查看虚拟环境中安装的包
pip freeze > requirements.txt # 收集当前环境中安装的包及其版本
pip install -r requirements.txt # 安装项目使用到的模块
项目搭建
mkdir django
cd django
django-admin startproject siteapi
使用 PyCharm 打开新建的项目 siteapi,点击「File」->「Settings」->「Project: siteapi」->「Python Interpreter」。
点击右上角的⚙️->「Add…」->「Existing environment」,找到虚拟环境下的 Python 解释器(django_envScriptspython.exe)。
打开 manage.py,右键「Run ‘manage’」,点击右上角「manage」->「Edit Configurations…」,在 Parameters: 填入参数:runserver 0.0.0.0:8000
。
重新运行 manage.py,然后浏览器访问 http://127.0.0.1:8000/
。
调整目录结构
在项目文件夹下新建 logs 目录,用来存放日志文件;新建 scripts 包,用来存放项目运行时的脚本文件。
在 siteapi 目录下新建包:apps、libs、utils(分别用来存放开发的代码、第三方库、开发的组件)。
在 siteapi 目录下新建 settings 包,包下面新建文件:dev.py、prod.py(分别用来存放项目开发时的本地配置、项目上线时的运行配置),然后把 settings.py 重命名为 settings_origin.py。把 settings_origin.py 文件的内容复制到 dev.py 中。
修改 manage.py 文件中的 os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘siteapi.settings’) 为 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'siteapi.settings.dev')
。
创建代码版本
cd django
git init
git add .
git commit -m '项目搭建和调整目录结构'
git remote add origin 远程仓库地址
git push -u origin "master"
git branch dev # 创建分支
git checkout dev # 切换分支
日志配置
在 siteapisettingsdev.py 文件尾部添加:
## 日志配置
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
# 日志格式
'formatters': {
'verbose': {'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s',
},
'simple': {'format': '%(levelname)s %(message)s',
},
},
# 日志过滤信息
'filters': {
'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue',
},
},
# 日志处理方式
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': Path.joinpath(BASE_DIR.parent, 'logs/site.log'),
'formatter': 'verbose'
},
},
'loggers': {
'django': {'handlers': ['console', 'file'],
'propagate': True,
},
}
}
异常处理
在 siteapiutils 目录下新建文件:exceptions.py,输入以下内容:
from rest_framework.views import exception_handler
from django.db import DatabaseError
from rest_framework.response import Response
from rest_framework import status
import logging
logger = logging.getLogger('django')
def custom_exception_handler(exc, context):
"""
自定义异常处理
exc:本次请求发生的异常信息
context:本次请求发生异常的执行上下文
"""
response = exception_handler(exc, context)
if response is None:
"""
到这里只有 2 种情况:要么程序没出错
要么出错了而 Django 或者 restframework 不识别
"""
view = context['vies']
if isinstance(exc, DatabaseError):
# 数据库异常
logger.error('[%s] %s' % (view, exc))
response = Response({'message': '服务器内部错误,请联系客服工作人员!'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
return response
在 siteapisettingsdev.py 文件尾部添加:
## 异常处理
REST_FRAMEWORK = {'EXCEPTION_HANDLER': 'siteapi.utils.exceptions.custom_exception_handler'}
数据库配置
## 连接数据库
mysql -u root -p
## 创建数据库
create database siteapi charset=utf8mb4;
## 创建数据库用户
create user siteapi_user identified by '123';
grant all privileges on siteapi.* to 'siteapi_user'@'%';
flush privileges;
接下来,在 siteapisettingsdev.py 文件中进行配置和修改:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'siteapi',
'USER': 'siteapi_user',
'PASSWORD': '123',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
在 siteapi__init__.py 文件中添加如下代码:
import pymysql
pymysql.install_as_MySQLdb()
前端搭建
Node.js 安装,官网下载地址:https://nodejs.org/en/download/
npm config set registry https://registry.npm.taobao.org
npm install --global vue-cli
vue -V # 检查是否安装成功
创建项目
cd django
vue init webpack site_pc
? Project name site_pc
? Project description A Vue.js project
? Author google <qq@qq.com>
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? No
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) npm
cd site_pc
npm run dev
打开浏览器,访问 http://localhost:8080
,查看效果。
使用 PyCharm 打开新建的项目 site_pc,点击右上角 [Add Configurations…] -> 左上角 [+],找到 npm 选中,在 Scripts: 填入:dev
。
初始化
删掉 srcrouterindex.js 文件里面的如下代码:
import HelloWorld from '@/components/HelloWorld'
name: 'HelloWorld',
component: HelloWorld
清除 srcAPP.vue 中的默认样式:img 标签和 #app。
删除默认的 HelloWorld 组件(srccomponentsHelloWorld.vue)。
前端首页
在 srccomponents 目录下新建文件:Home.vue,然后到 srcrouterindex.js 文件进行引入:
import Home from "../components/Home"
export default new Router({
mode: "history",
routes: [
{
path: '/',
name: 'Home',
component: Home
}, {
path: '/home',
name: 'Home',
component: Home
}
]
})
初始化全局变量和方法
在 src 目录下新建文件:settings.js,并添加:
export default {"HOST": "http://localhost:8080/",}
在 srcmain.js 中引入:
import settings from "./settings"
Vue.prototype.$settings = settings
引入 ElementUI
npm i element-ui -S
在 srcmain.js 中导入 ElementUI,并调用:
// element-ui 配置
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
// 调用插件
Vue.use(ElementUI)
成功引入 ElementUI,就可以开始进入前端页面开发,首先是首页。
在 static 目录下新建目录:css,在 css 目录下新建文件:reset.css,写入:
/* 声明全局样式和项目的初始化样式 */
body, h1, h2, h3, h4, p, table, tr, td, ul, li, a, form, input, select, option, textarea{
margin: 0;
padding: 0;
font-size: 15px;
}
a{
text-decoration: none;
color: #333;
}
ul, li{list-style: none;}
table{
/* 合并边框 */
border-collapse: collapse;
}
/* 工具的全局样式 */
.full-left{float: left!important;}
.full-right{float: right!important;}
[class*="el-icon-"], [class^=el-icon-]{font-size: 50px;}
.el-carousel__arrow{
width: 120px;
height: 120px;
}
.el-checkbox__input.is-checked .el-checkbox__inner,
.el-checkbox__input.is-indeterminate .el-checkbox__inner{
background: #ffc210;
border-color: #ffc210;
border: none;
}
.el-checkbox__inner:hover{border-color: #9b9b9b;}
.el-checkbox__inner{
width: 16px;
height: 16px;
border: 1px solid #9b9b9b;
border-radius: 0;
}
.el-checkbox__inner:after{
height: 9px;
width: 5px;
}
在 srcmain.js 中导入 css 初始化样式:import '../static/css/reset.css'
srccomponents 目录下新建文件:Header.vue、Banner.vue、Footer.vue。