fantastic-admin前端+django后端,初始化全流程记录

fantastic-admin前端是我目前看到最完善的前端框架,只需要简单的设置就可以快速开始项目。

但是我本人的能力有限,对前端知识一知半解,之前废了九牛二虎之力才跑通了前后端流程,由于新的项目需要,有了开发新后台的想法,正好fantastic-admin发布了4.11.0,我就想重新走一遍初始化流程,一个是把之前一知半解的东西再搞搞,另外就是记录下前后端对接的流程,也许以后还用的上,也少走弯路。

废话不说,先看效果,我只是把前后端流程跑通,没有增加任何功能在里面。

居中布局

左侧布局

右侧布局

新版本重新做了登录界面,支持左,中,右的布局,个人感觉非常专业,尤其是将图片换成视频以后,更是显得高大上,这块源文件里没有提供示例,简单修改一下即可。

----------  下面开始前后端对接流程  ----------

1、fantastic前端的启动方法

1.1、下载前端的源代码,选择核心不带示例程序的那个(带示例的没法打包);

1.2、拷贝到指定目录,然后在 fantastic 目录下执行 pnpm install ,安装基础依赖包;

1.3、运行 pnpm run build,查看打包的状态,看看有没有出错;

1.4、运行 pnpm run dev,打开应用界面,查看是否可以正常运行;

1.5、按照示例要求修改路由,将路由的内容改为我希望的内容,位置在 /src/router 

  • 由里的 name 值不能重复,否则会报错,或者出现页面 404 的情况,这个在复制一个路由文件的时候经常出现;
  • 路由的具体实现方法,请参考fantastic-admin的帮助文档

1.6、调整根目录下的 .env.development 文件

  • 修改 VITE_APP_TITLE 为产品名称;
  • 修改 VITE_APP_API_BASEURL 为后台地址,如果对应本地的 django 就是 http://127.0.0.1:8000/
  • 生产环境暂不考虑;
  • 这是页面还能正常显示,因为请求还没有切换到后台。

---------- 前端不改动代码部分完成,后续为个性化设置 ----------

我的后端使用的是 django,主要是前后端分离,用django可以省很多时间

2、django 后端启动方法

2.1、准备新建一个django程序 在当前目录键入命令建立一个项目叫 all_in_one;

django-admin startproject all_in_one 

2.2、新建一个应用,如crm 键入;

cd all_in_one;
python3 manage.py startapp crm
  • 这样就新建了一个应用,可以以此类推新建多个应用;

2.3、将系统的默认配置写入数据库,默认为sqlite;

python3 manage.py migrate

2.4、启动程序,现实下面信息即表示启动成功;

 python3 manage.py runserver 

2.5、修改 /all_in_one/setting.py 文件,这里的设置实际上只是看下默认页面的效果,对实际使用没有影响

2.6、修改 /all_in_one/urls.py 文件,内容如下:

2.7、将 urls.py 文件拷贝到 crm policy pricelist 目录下,内容为:

2.8、在相应文件的 /crm/views.py 中添加函数,如下:

def default_api(request: HttpRequest) -> str :

	# 从POST请求的body中获取JSON数据
	response_data = {}
	response_data['status'] = 'OK'
	return JsonResponse(response_data, status=200)

这个函数不是完整版,有些不明白的后面会有所说明

2.9、在浏览器访问这个链接 http://127.0.0.1:8000/crm/default 在 django 控制台上能看到响应,浏览器上看到返回的 json 即表示配置成功;

3、前后端联调。

3.1、后端安装 django 的 cors插件

pip3 install django-cors-headers

安装完后在setting.py中添加中间件及跨域许可

        MIDDLEWARE = [
            ...
            # cors 中间件
            'corsheaders.middleware.CorsMiddleware',
            'django.middleware.common.CommonMiddleware',
        ]
        # 设置允许跨域请求的来源
        CORS_ORIGIN_WHITELIST = [
            'http://localhost:9000',  # 允许来自 localhost:9000 的请求
            'http://127.0.0.1:9000',  # 可以同时指定 http 和 https 协议
            # 如果需要允许任意来源,可以使用下面的设置
            # 'http://*',
            # 'https://*',
        ]

3.2、修改后端函数代码,将之间只是简单的看效果的函数修改为响应需求的函数

from django.shortcuts import render

# Create your views here.
import json
from django.http import JsonResponse, HttpResponse
from django.views.decorators.csrf import csrf_exempt  
from django.views.decorators.http import require_http_methods
from django.http import HttpRequest, JsonResponse

@csrf_exempt
@require_http_methods(["POST"])  # 确保这个视图只接受POST请求
def default_api(request: HttpRequest) -> str :

	# 从POST请求的body中获取JSON数据
	body_unicode = request.body.decode('utf-8')  # 将bytes类型的body转换为unicode
	data = json.loads(body_unicode)  # 将unicode转换为Python字典
	account = data.get('account', '')
	password = data.get('password', '')
	print(account)
	print(password)

	response_data = {}
	response_data['status'] = '1'
	response_data['error'] = ''
	response_data['data'] = {}
	response_data['data']['account'] ='admin'
	response_data['data']['token'] = '12345'
	response_data['data']['avatar'] = ''
	print(response_data)
	return JsonResponse(response_data, status=200)

解释一下这个函数的作用

@csrf_exempt

@require_http_methods(["POST"])  # 确保这个视图只接受POST请求

后面response_data的格式是前端规定好的,在官方帮助文档 在/src/api/index.ts的拦截器里有说明

    /**
     * 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示
     * 假设返回数据格式为:{ status: 1, error: '', data: '' }
     * 规则是当 status 为 1 时表示请求成功,为 0 时表示接口需要登录或者登录状态失效,需要重新登录
     * 请求出错时 error 会返回错误信息
     */

在 /src/store/modules/user.ts 里,如下图,需要从返回信息里获取account,token,avatar三个值,其中avatar是头像,返回空链接的话系统会替换上一个默认头像

* 这里的 account ,token,avatar 信息很重要,如果不是这个格式,即使用户信息验证正确,系统会默认跳转到登录页。

3.3、调整api的访问,文件在/src/api/modules/user.ts,如下图

只需将baseURL 注销,即可访问地址就是在 django 后台设置的二级链接,这时点击登录,系统会直接跳转到后台的默认界面。前后端对接完成。

划重点:总结

1、一定要详细的看官方帮助文件,里面有很多信息尤其是对第一次使用的人而言非常重要,我这个流程里回避了很多可能出现的问题,如果不看文档,会有方方面面的问题;

2、有关 django的内容我没有详细写,默认读者是了解django的基本概念的,在这里我只用了django 的url 和views 的部分,实现了前后端分离,至于其他功能,需自行学习;

3、之所以写这个文章个人感觉主要是提炼官方帮助文档里没说清的一些内容,把主线流程梳理清楚,方便快速上手。

4、建议大家多多支持国内的个人开发者,如 fantastic-admin 这样的好产品,送人玫瑰手留余香。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/872780.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【有啥问啥】大模型应用中的哈希链推理任务

大模型应用中的哈希链推理任务 随着人工智能技术的快速发展,尤其是大模型(如GPT、BERT、Vision Transformer等)的广泛应用,确保数据处理和模型推理的透明性与安全性变得愈发重要。哈希链推理任务作为一种技术手段,能够…

学习计算机网络

a类0~127,b类128~191,c类192~223 网络地址:看子网掩码,分网络位和主机位,后面是主机位,主机位全部为0,网络地址。 直接广播地址:看子网掩码,分网络位和主机位&#xff…

Jenkins构建CI/CD

CI/CD 软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。 它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少…

vue2+ueditor集成秀米编辑器

一、百度富文本编辑器 1.首先下载 百度富文本编辑器 下载地址:GitHub - fex-team/ueditor: rich text 富文本编辑器 2.把下载好的文件整理好 放在图片目录下 3. 安装插件vue-ueditor-wrap npm install vue-ueditor-wrap 4.在你所需要展示的页面 引入vue-uedito…

判断给定的一个不限长的数字串大小变化趋势、经典面试题:猴子排成圈踢出求最后剩下大王编号以及Debian服务器php中安装IMAP扩展各种报错解决过程

一、判断给定的一个不限长的数字串大小变化趋势 自制了一道面试题:给定一个不限长的数字字符串,判断每一位数字的大小变化趋势是否是^或v趋势,如果是就返回true,如果不是就返回false。比如121即属于^,322129即属于v。这…

Verilog和Matlab实现RGB888互转YUV444

文章目录 一、色彩空间1.1 RGB色彩空间1.2 CMYK色彩空间1.3 YUV色彩空间 二、色彩空间转换公式2.1 RGB转CMYK2.2 CMYK转RGB2.3 RGB888转YUV4442.4 YUV444转RGB888 三、MATLAB实现RGB888转YUV4443.1 matlab代码3.2 matlab结果 四、Verilog实现RGB888转YUV444 一、色彩空间 色彩空…

【区块链 + 物联网】区块链边缘计算网关设备 | FISCO BCOS应用案例

目前边缘端设备主要以人工智能应用为主,或以数据采集网络设备为主,还未有区块链边缘计算网关设备,难以 在依托终端设备的传统行业中进行区块链 应用。本项目研制区块链边缘计算网关,将区块链、计算与网络集成 在一起,…

单片机学习笔记

一、单片机帝国的诞生与发展 1.1 单片机的基本概念 单片机是一种集成电路芯片,采用超大规模的集成电路把具有数据处理功能的中央处理器存储器、输入输出端口、外围电路和相关外设集成在一块硅片上构成一个小而完整的微型计算机系统。 一般而言,单片机也…

Java语言程序设计基础篇_编程练习题**17.21 (十六进制编辑器)

目录 题目:**17.21 (十六进制编辑器) 代码示例 结果展示 题目:**17.21 (十六进制编辑器) 编写一个 GUI 应用程序,让用户在文本域输入一个文件名,然后按回车键,在文本域显示它的十六进制表达形式。用户也可以修改十六…

分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型

分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型 文章目录 一、基本原理1. 数据准备2. XGBoost模型建立3. DBO优化XGBoost参数4. 模型训练5. 模型评估6. 结果分析与应用原理总结 二、实验结果三、核心代码四、代码获…

1-9 图像膨胀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel np.ones((3, 3), np.uint8) _, binary_image cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) dilated_image cv2.dilate(binary_image, kernel, iterations1) 三、运行现象 四、完整代码 五、完整工程贴出 一、提前准备 …

scrapy 爬取微博(一)【最新超详细解析】:创建微博爬取工程

本项目属于个人学习记录,爬取的数据会于12小时内销毁,且不可用于商用。 1 初始化环境 首先我们需要有python环境,先安装一下python,然后配置环境变量,这边给出windows的配置: 我这边的安装目录是D:\pyt…

PHP轻量级高性能HTTP服务框架 - webman

摘要 webman 是一款基于 workerman 开发的高性能 HTTP 服务框架。webman 用于替代传统的 php-fpm 架构,提供超高性能可扩展的 HTTP 服务。你可以用 webman 开发网站,也可以开发 HTTP 接口或者微服务。 除此之外,webman 还支持自定义进程&am…

Django发送邮件

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 Django 5框架Web应用开发_夏天又到了的博客-CSDN博客 本文学习怎么使用Django发送邮件。 尽管使用Python的smtplib模块发送电子邮件…

vant 动态查询下拉菜单(可用)

动态查询item项 <van-form submit"onSubmit" ref"formRef"><Title title"企业信息" title-line title-size"19" class"ml-[18px] mb-[18px]"></Title><van-cell-group inset class"py-[18px]&quo…

【JavaSE基础】Java 基础知识

Java 转义字符 Java 常用的转义字符 在控制台&#xff0c;输入 tab 键&#xff0c;可以实现命令补全 转义字符含义作用\t制表符一个制表位&#xff0c;实现对齐的功能\n &#xff1a;换行符\n换行符一个换行符\r回车符一个回车键 System.out.println(“韩顺平教育\r 北京”);&…

pod基础和镜像拉取策略

目录 pod概念 pod的分类 1.基础容器 pause 2.初始化容器 init 实验&#xff1a;定义初始化容器 init容器的作用 实验&#xff1a;如何在容器内部进行挂载 镜像拉取策略 pod概念 pod是k8s里面的最小单位&#xff0c;pod也是最小化运行容器的资源对象。容器是基于pod在k…

黑马点评10——用户签到-BitMap数据结构

文章目录 BitMap用法签到功能签到统计 BitMap用法 其实数据库完全可以实现签到功能 但签到数据比较大&#xff0c;借鉴签到卡的思想 布隆过滤器也是使用BitMap实现的. 签到功能 因为是当前用户的当天&#xff0c;所以保存需要的年月日不需要参数&#xff0c;可以直接获取。…

matter中的Fabric(网络结构)

什么是Fabric&#xff1f; Fabric可以被理解为一组相互信任的设备和控制器&#xff0c;它们共享一个共同的信任域。这意味着在同一个Fabric中的设备和控制器之间可以进行安全的通信&#xff0c;而无需额外的身份验证或安全检查。每个Fabric有一个唯一的标识&#xff0c;确保Fab…

Android调整第三方库PickerView宽高--回忆录

一、效果 // 时间选择implementation com.contrarywind:Android-PickerView:4.1.9 多年前&#xff0c;使用到事件选择器&#xff0c;但是PickerView默认宽度使满屏的&#xff0c;不太符合业务需求&#xff0c;当时为此花了许多时间&#xff0c;最终找到了解决方案&#xff0c;…