文章目录
说明
前后端完成后,将react打包后移植到django中,省去tomcat、negix的安装与配置,最后生成可执行文件,这样在对方windows电脑上可以无任何环境直接运行。
前提准备
后端环境:Django==2.2.1
前端:react-app打包生成build,如下:
在这里插入图片描述](https://img-blog.csdnimg.cn/c10428000d1a4a948b9f955747e0cb69.png)
详细步骤
1. 在 settings.py 中添加
# 静态资源存放路径
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) #后面会去掉 先测试
2. 创建 static 文件
3. 在 stati 文件随便放个图片,然后访问,如果可以的话就没问题
http://127.0.0.1:8089/static/logo192.png
4. 创建 templates,随意添加个 html,并在 settings 中配置路径
TEMPLATES = [
{
.....
'DIRS': [(os.path.join(BASE_DIR, 'templates'))],
....
}]
5. 添加返回页面控制,并测试
from django.shortcuts import render
def index(request):
return render(request,'index.html')
############
path('', index, name='index'),
6. 将前端打包后的文件除 html 之外放入 static 当中
-static
css
js
media
asset-manifest.json
favicon.ico
logo192.png
logo512.png
mainifest.json
robots.txt
7. 将 html 放入 templates 中并修改路径,没/static/ 前缀的给加上
修改后参考:
<head>
<meta charset="utf-8" />
<link rel="icon" href="/static/favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="Web site created using create-react-app" />
<link rel="apple-touch-icon" href="/static/logo192.png" />
<link rel="manifest" href="/static/manifest.json" />
<title>React App</title>
<script defer="defer" src="/static/js/main.dfa0dc8e.js"></script>
<link href="/static/css/main.bae4799b.css" rel="stylesheet" />
</head>
8. 404 定向到 html 文件,前端页面的路由跳转交给前端处理,全部重定向到 index.html
#1. settings.py
DEBUG = False
ALLOWED_HOSTS = ['*']
STATIC_URL = '/static/'
#STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) #去掉!!!!!!!!!!!!!!!!!!!
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
#2. 添加view
def page_not_found(request, exception, template_name='index.html'):
return render(request, template_name)
#3. 在urls.py中添加
from django.urls import path,include,re_path
from django.views.static import serve
from django.conf import settings
from django.conf.urls.static import static
handler404 = page_not_found
urlpatterns = [
#............
re_path(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),
]
#4. 执行转移
python manage.py collectstatic
#5. 搞定可测试
9. 打包成 exe 文件
1. pip install pyinstaller
2. pyi-makespec -D manage.py
3. 注意生成的manage.spec
4. manage.spec的data中添加静态资源路径和templates路径
a = Analysis(['manage.py'],
pathex=[],
binaries=[],
datas=[(r'E:\event_project\event_server\static',r'.\static'),(r'E:\event_project\event_server\templates', r'.\templates')],
5. pyinstaller manage.spec 开始打包
6. 打包完成后进入dist/manage下cmd执行manage.exe runserver 即可完成