参考资料【极其推荐】:ant design pro v4(typescript)视频
1.如何代理到后端服务器?
配置proxy.ts
不走 mock 数据
npm run start:no-mock
django后端日志
Not Found: /api/login/
[11/Sep/2020 14:17:16] "POST /api/login/ HTTP/1.1" 404 2090
后端路由修改成匹配前端的
url(r'^api/login/', login_view, name='login'),
django后端日志
Forbidden (CSRF cookie not set.): /api/login/
[11/Sep/2020 14:18:50] "POST /api/login/ HTTP/1.1" 403 2837
需要处理CSRF
前端处理
res.setHeader('Access-Control-Allow-Origin', '*'); // CSRF暂时处理方案
后端处理
settings导入了csrf中间件
'django.middleware.csrf.CsrfViewMiddleware',
方法上添加CSRF注解
@csrf_exempt
def login_view(request):
print('触发后端登录函数')
return HttpResponse("<h1>触发后端登录函数!</h1>")
可以触发了:
触发后端登录函数
[11/Sep/2020 14:38:10] "POST /api/login/ HTTP/1.1" 200 34
然后因为ant design pro登录要求传参,我们需要对后端的视图函数进行修改,先在后端写一个死数据,将前端的mock数据取过来:
@csrf_exempt
def login_view(request):
print('触发后端登录函数')
print(request)
res = {
'name': 'Admin',
'avatar': 'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
'userid': '00000001',
'email': 'antdesign@alipay.com',
'signature': '海纳百川,有容乃大',
'title': '交互专家',
'group': '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
'tags': [
{'key': '0',
'label': '很有想法的',
},
{'key': '1',
'label': '专注设计',
},
{'key': '2',
'label': '辣~',
},
{'key': '3',
'label': '大长腿',
},
{'key': '4',
'label': '川妹子',
},
{'key': '5',
'label': '海纳百川',
},
],
'notifyCount': 12,
'unreadCount': 11,
'country': 'China',
'access': 'admin', # 权限角色
'geographic': {
'province': {
'label': '浙江省',
'key': '330000',
},
'city': {
'label': '杭州市',
'key': '330100',
},
},
'address': '西湖区工专路 77 号',
'phone': '0752-268888888',
}
return JsonResponse({"result": res, "code": 200, "message": ""})
请求发成功了,数据返回了
currentUser登录验证时候此方法也需要满足数据验证通过【暂时没去整理这个方法的作用】
django后端补上这个方法和url,返回的数据先做成和login的一样,但是还没通过,确认一下要什么数据才能通过:
找到原因啦!!
login和currentUser的方法参数我给反了:
后端改成如下:
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
import json
# Create your views here.
@csrf_exempt
def login_view(request):
if request.method == 'POST':
req_data = json.loads(request.body)
username = req_data.get("username")
password = req_data.get("password")
type = req_data.get("type")
print(username, password, type)
user = authenticate(username=username, password=password)
if user:
print('后端登录')
login(request, user) # 后端登录
res = {'name': 'admin',
'password': 'admin',
'status': 'ok',
'type': 'account'}
else: # 数据库校验失败
res = {'status': 'error',
'type': '', }
return JsonResponse(res)
else: # 请求出问题
res = {'status': 'error',
'type': ''}
return JsonResponse(res)
@csrf_exempt
def currentUser(request):
'''暂时用户表没拓展这么多属性,先不做权限
'''
if request.method == 'GET':
res = {
'name': 'HAHAadmin',
'avatar': 'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
'userid': '00000001',
'email': 'antdesign@alipay.com',
'signature': '海纳百川,有容乃大',
'title': '交互专家',
'group': '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
'tags': [
{'key': '0',
'label': '很有想法的',
},
{'key': '1',
'label': '专注设计',
},
{'key': '2',
'label': '辣~',
},
{'key': '3',
'label': '大长腿',
},
{'key': '4',
'label': '川妹子',
},
{'key': '5',
'label': '海纳百川',
},
],
'notifyCount': 12,
'unreadCount': 11,
'country': 'China',
'access': 'admin', # 权限角色
'geographic': {
'province': {
'label': '浙江省',
'key': '330000',
},
'city': {
'label': '杭州市',
'key': '330100',
},
},
'address': '西湖区工专路 77 号',
'phone': '0752-268888888',
}
return JsonResponse(res)
else:
res = {}
return JsonResponse(res)
前端那句CSRF也可以去掉
了
user.ts里面
成功效果:
提交表单后会立即出现登陆成功提示
并重定向到欢迎页面
接下来需要改成数据库用户校验的,将数据的值取出来,塞到表格中,然后表格每一行触发后生成echarts图表~
2. 自定义前端样式
2.1. 菜单图标
Icon图标
命名为outlined
前面那个单词小写:
config.ts
-icon
效果
2.2 favicon、加载图片、首页logo
可以直接替换的在public
和src/assets
文件夹下
首页svg logo可以不现实或者替换为自定义的logo,logo应该放在public
文件夹下