django 套vue 模板_Vue admin template + Django 快速进行Web开发

本文教大家如何使用Vue admin template和Django快速进行Web开发,旨在帮助我们使用现有的工具、框架及开源UI,让我们在基础较为薄弱的情况下,能进行Web开发。本文不会介绍过多的原理,实践为主。

Vue admin template的简单使用

Vue admin template是PanJiaChen开源的UI脚手架,通过它我们可以快速开发我们的系统,不必在考虑一个通用功能的封装问题。

Vue admin template是Vue element admin的一个纯净版本,Vue element admin继承了更多的功能,但是冗余的东西也比较多,因为不推荐直接使用Vue element admin,建议使用Vue admin template。

安装

以下安装方式为本地开发的安装及启动方式:

1

2

3

4

5

6

7

8

9

10

11

12# 克隆项目,以下命令二选一

gitclonehttps://github.com/PanJiaChen/vue-admin-template.git

gitclonehttps://gitee.com/panjiachen/vue-admin-template.git # 国内的,快,推荐

# 进入到项目目录

cdvue-admin-template

# 安装项目需要的依赖

npminstall

# 启动开发环境

npmrundev

线上部署的话,还是需要编译成静态文件,然后通过nginx进行访问,本文不介绍如果配置部署nginx,请自行百度。

1

2

3

4

5# 编译测试环境

npmrunbuild:stage

# 编译线上环境

npmrunbuild:prod

更多高级的用法如下:

1

2

3

4

5

6

7

8

9

10

11# 预览

npmrunpreview

# 预览 + 静态资源分析

npmrunpreview----report

# 代码格式检查

npmrunlint

# 代码格式检查并自动修复

npmrunlint----fix

第一个页面

依赖安装并成功启动后,接下来我们就开始我们的第一个页面的开发了。

在src/views下面创建我们Vue的展示页面。

1

2

31.在src/views下面创建一个存放新页面的目录,例如是src/views/demo。

2.在src/views/demo下创建index.vue。

3.在src/router/index.js下创建对应的访问路由。

src/views/demo/index.vue的内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Index

exportdefault{

data(){

return{

}

},

methods:{

}

}

在src/router/index.js里面添加新页面对应的访问路由,添加注释的都是需要我们根据场景进行调整的:

1

2

3

4

5

6

7

8

9

10{

path:'/demo',// 访问的路由地址

component:Layout,

children:[{

path:'index',// 访问的路由地址

name:'DemoIndex',// 路由名称

component:()=>import('@/views/demo/index'),// 对应的展示页面地址,@表示src

meta:{title:'Demo',icon:'dashboard'}// title表示菜单展示的名称,icon表示图标

}]

}

到此一个简单的页面就创建完成了,通过 http://IP:Port/demo/index,就能访问到对应的页面信息了。

Django rest_framework_jwt 登录认证

需要安装的包:

1

2pipinstalldjangorestframework-jwt

pipinstalldjangorestframework

配置获取验证令牌的URL

我们使用rest_framework_jwt中的JSONWebTokenAuthentication进行简单的登录验证。

在urls.py中进行如下配置:

1

2

3

4

5

6

7

8fromdjango.contribimportadmin

fromdjango.urlsimportpath

fromrest_framework_jwt.viewsimportobtain_jwt_token

urlpatterns=[

path('admin/',admin.site.urls),

path("jwt-token",obtain_jwt_token),# 通过此接口获取包含用户名和密码的令牌

]

请自行创建

通过以下命令验证是否成功:

1$curl-XPOST-d"username=lanyulei&password=lanyulei"http://127.0.0.1:8000/jwt-token/

通过Postman验证接口是否可正常访问,返回以下内容则为成功:

配置验证参数

我们配置完获取令牌的URL后,还需要配置认证方式,配置认证方式有全局生效的,也有局部生效的,下面分别介绍一下。

全局生效,即在settings添加对应的配置,如下:

1

2

3

4

5

6

7

8

9

10REST_FRAMEWORK={

# 全局配置JWT验证设置

'DEFAULT_AUTHENTICATION_CLASSES':(

'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

),

# 身份认证

'DEFAULT_PERMISSION_CLASSES':(

'rest_framework.permissions.IsAuthenticated',

),

}

局部生效,即在对应的接口下面进行配置,仅对这个接口生效,如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15fromdjango.httpimportJsonResponse

fromrest_framework.viewsimportAPIView

fromrest_framework.permissionsimportIsAuthenticated

fromrest_framework_jwt.authenticationimportJSONWebTokenAuthentication

classTesting(APIView):

authentication_classes=[JSONWebTokenAuthentication]# JWT验证

permission_classes=[IsAuthenticated]# 身份验证

defget(self,request,*args,**kwargs):

returnJsonResponse({

"code":200

})

获取当前登陆的用户信息

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19classUserInfo(APIView):

defget(self,request,*args,**kwargs):

res={

"code":20000,

"msg":"获取用户信息成功",

"data":[]

}

try:

userInfo=list(User.objects.filter(username=request.user.username).values())

iflen(userInfo)>0:

userInfo=userInfo[0]

else:

userInfo={}

res["data"]=userInfo

exceptExceptionase:

res["code"]=-1

res["msg"]=f"获取用户信息失败, {e}"

returnJsonResponse(res)

Vue admin template配置登录

进行到这里,我们的后端就基本完事了,剩下的就是前端的配置了。

配置开发环境的跨域问题

在vue.config.js中的devServer里面加入以下内容:

1

2

3

4

5

6

7

8

9

10

11

12proxy:{

// change xxx-api/login => mock/login

// detail: https://cli.vuejs.org/config/#devserver-proxy

[process.env.VUE_APP_BASE_API]:{

// target: `http://127.0.0.1:${port}`,

target:`http://localhost:8000`,

changeOrigin:true,

pathRewrite:{

['^'+process.env.VUE_APP_BASE_API]:''

}

}

}

注释mock,找到下面的代码,注释掉。

1// before: require('./mock/mock-server.js')

调整API请求

修改src/api/user.js为以下内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16importrequestfrom'@/utils/request'

exportfunctionlogin(data){

returnrequest({

url:'/api/v1/jwt-token',

method:'post',

data

})

}

exportfunctiongetInfo(){

returnrequest({

url:'/api/v1/userinfo',

method:'get'

})

}

调整login函数

vue admin template是的登录是使用vuex来处理的,我们需调整src/store/modules/user.js下的login动作。

1

2

3

4

5

6

7

8

9

10

11

12

13// user login

login({commit},userInfo){

const{username,password}=userInfo

returnnewPromise((resolve,reject)=>{

login({username:username.trim(),password:password}).then(response=>{

commit('SET_TOKEN',response.token)

setToken(response.token)

resolve()

}).catch(error=>{

reject(error)

})

})

},

设置身份验证Header参数

在src/utils/requests.js文件中配置验证参数Authorization

1

2

3config.headers['X-Token']=getToken()

将上面替换为如下:

config.headers['Authorization']='JWT '+getToken()

修改请求状态码验证

1

2

3res.code!==20000

替换为:

res.code!==20000&&res.token===undefined

修改Login页面,移除测试相关数据

文件位置:src/views/login/index.vue

删除关于用户名和密码无意义的验证。

删除自定义校验函数,搜索一下内容删除掉。

1

2

3

4

5

6

7

8

9

10

11

12

13

14constvalidateUsername=(rule,value,callback)=>{

if(!validUsername(value)){

callback(newError('Please enter the correct user name'))

}else{

callback()

}

}

constvalidatePassword=(rule,value,callback)=>{

if(value.length<6){

callback(newError('The password can not be less than 6 digits'))

}else{

callback()

}

}

删除自定义外部引入函数,搜索一下内容删除。

1import{validUsername}from'@/utils/validate'

在rules中移除validUsername和validatePassword的触发函数。

1

2

3

4

5

6

7

8

9loginRules:{

username:[{required:true,trigger:'blur',validator:validateUsername}],

password:[{required:true,trigger:'blur',validator:validatePassword}]

},

替换为:

loginRules:{

username:[{required:true,message:'请输入用户名',trigger:'blur'}],

password:[{required:true,message:'请输入密码',trigger:'blur'}]

},

获取当前用户信息

修改src/store/modules/user.js里面的getInfo函数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20// get user info

getInfo({commit,state}){

returnnewPromise((resolve,reject)=>{

getInfo().then(response=>{

const{data}=response

if(!data){

returnreject('Verification failed, please Login again.')

}

const{username,avatar}=data

commit('SET_NAME',username)

commit('SET_AVATAR',avatar)

resolve(data)

}).catch(error=>{

reject(error)

})

})

},

用户退出函数调整

修改src/store/modules/user.js里面的logout函数。

1

2

3

4

5

6

7

8

9// user logout

logout({commit,state}){

returnnewPromise((resolve,reject)=>{

removeToken()// must remove  token  first

resetRouter()

commit('RESET_STATE')

resolve()

})

}

本文为原创文章,未经授权禁止转载本站文章。

原文出处:兰玉磊的个人博客

原文链接:https://www.fdevops.com/2020/09/09/vue-django-5171

版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js浮点运算式

结果 calc(0.23*-0.03(4*0.2)) >0.7931 代码 //加|减|乘|除 浮点运算 const floatMulti (a, b) > {let m 0, s1 a.toString(), s2 b.toString(), s1l s1.split(.)[1], s2l s2.split(.)[1]m (s1l ? s1l.length : 0) (s2l ? s2l.length : 0)return Number(s1…

悬浮球多功能_一个悬浮球,怎么可以这么贴心~

原标题&#xff1a;一个悬浮球&#xff0c;怎么可以这么贴心~一个悬浮球 满足你N个愿望※ 专题&#xff5c;图文&#xff5c;悬浮球上手指南这个小蛋蛋是不少小朋友喜爱的零食&#xff0c;因为它能满足小朋友好几个愿望&#xff0c;能吃又能玩的零食哪个小朋友会不喜欢&#xf…

python 字典添加元素乱序了_Python有序字典的两个小“惊喜”

从 Python 3.6 开始&#xff0c;常规的字典会记住其插入的顺序&#xff1a;就是说&#xff0c;当遍历字典时&#xff0c;你获得字典中元素的顺序跟它们插入时的顺序相同。在 3.6 之前&#xff0c;字典是无序的&#xff1a;遍历顺序是随机的。关于有序字典&#xff0c;这里有两件…

el-table跨页选中

以id作为唯一标识 模板 <el-table :data"data" ref"table"select-all"selectAll"select"select"style"width:100%"><el-table-column type"selection"></el-table-column><el-table-colum…

bsc是指什么_为什么KPI令人厌恶?中小企业不要乱用KPI!

私信小编“绩效”两字&#xff0c;免费发送60分钟薪酬绩效管理内部培训视频。导读现在很多的企业都会对员工做一些绩效考核&#xff0c;大多数还是采用KPI的方式。但是员工对KPI的考核越来越反感&#xff0c;甚至出现抵触的情况。为什么会出现这种想象呢&#xff1f;其实很简单…

js原生popup_JavaScript的popup框

确认框用于使用户可以验证或者接受某些信息。当确认框出现后&#xff0c;用户需要点击确定或者取消按钮才能继续进行操作。如果用户点击确认&#xff0c;那么返回值为 true。如果用户点击取消&#xff0c;那么返回值为 false。语法&#xff1a;confirm("文本")functi…

解决微信小程序 [Component] slot ““ is not found.

解决方式 当使用自定义组件或者slot标签作为组件A的插槽内容时&#xff0c;在组件A中必须定义一个默认插槽&#xff0c;对普通view等标签无限制。且因为wx:if为false的插槽等同没有定义 场景复现&#xff08;仅以自己遇到情况为例&#xff09; 1、调试基础库2.19.4 2、使用w…

列表排序应用FLIP动画(vue)

效果 原理详解 链接 1.beforeUpdate 获取first 变化前位置 (以id建立map映射) 2.updated 获取变化后位置 last 3.禁用transition并transform元素回初始位置 4.异步恢复transition 并取消 transform 代码 <template><div ref"container"><div style&…

面试项目亮点_码农:面试被问到自己项目亮点时,感觉自己的回答虚伪的不行!...

据我个人观察&#xff0c;大多数程序员都对自己现有的项目有吐糟的习惯&#xff0c;比如吐糟代码逻辑混乱&#xff0c;代码规范问题&#xff0c;代码可读性差&#xff0c;代码没有注释&#xff0c;没有文档&#xff0c;代码极度冗余等等&#xff0c;总之满眼看到的都是一些缺陷…

无敌小恐龙

断网恐龙小游戏无敌版&#xff0c;控制台输入 boxCompare _> false

怎样设计访谈提纲_论访谈提纲的设计

访谈提纲的设计一、访谈提纲如何设计:首先是该怎么命题&#xff0c;也就是访谈的主题或大题目是什么&#xff1b;其次是访谈的题目设计在多少比较合理&#xff1b;再次是访谈的主要点是什么&#xff1b;之后是各题目之间是什么关系&#xff1b;再后是访谈提纲设计注意哪些基本点…

微信小程序 仿 SwipeCell 的滑动单元格 SwipeBox

效果 代码 页面 调用Page <block wx:for"{{4}}" wx:key"{{item}}"><view style"text-align:center;padding:20px"><swipe-box><view slot"left" style"">左侧内容</view><view class&q…

u852日期限制解决补丁_《赛博朋克》1.06补丁出炉:进一步提升主机版本稳定性...

《赛博朋克2077》虽说是出师不利&#xff0c;但是开发商CDPR承诺自己会持续优化这款“尚待打磨”的作品&#xff0c;这种态度还是要稍微肯定一下的。我们看到之前CDPR就已经推送了1.05补丁&#xff0c;修复了大量的BUG以及问题&#xff0c;并且以游戏主机的BUG修复为重点&#…

微信小程序原生横向步骤条steps

效果 代码 调用 <rug-step options"{{steps}}" active"{{stepActive}}"></rug-step>steps: [{ label: 步骤1 },{ label: 步骤步骤步骤步骤2 },{ label: 步骤3 },{ label: 步骤步骤步骤步骤步骤4 },{ label: 步骤4 },{ label: 步骤4 },{ label…

华为云 手机 电脑登录不了怎么办 账户_华为云手机能解决芯片困难,是否真的实在,来西瓜视频找答案...

最近&#xff0c;网上到处流传着华为发布鲲鹏云手机的信息&#xff0c;有人说这个云手机能化解华为眼下的芯片燃眉之急的样子。事实真的如此吗?小编最近关注到&#xff0c;华为的鲲鹏云手机又成为大家关注和谈论的热点&#xff0c;甚至还有人说&#xff0c;华为有了云手机&…

单选复选状态控制类

场景 不同的平台写基础组件&#xff0c;写累了&#xff0c;对于单选复选这种逻辑闭合的组件&#xff0c;javascript 控制脚本是可以完全独立出来的&#xff0c;仅对外暴露状态即可根据不同的平台和环境进行视图的渲染 效果 使用 初始化 let selector new Selector({key: va…

康普顿效应是弹性碰撞吗_如何正确解读物理实验结果系列之十二——康普顿效应与光子...

作者&#xff1a;彭晓韬日期&#xff1a;2020年01月10日[文章摘要]&#xff1a;康普顿效应和光电效应一样&#xff0c;被广泛认定为支持光为光子的重要证据之一。但光电效应因无法解释紫限&#xff08;高于一定频率的光也不能产生光电效应&#xff09;现象而倍受质疑。同样地&a…

svn服务器搭建和使用 ubuntu_ubuntu下 SVN 服务器搭建及使用

简化篇http://blog.csdn.net/Eric_lmy/article/details/51942931详细篇1.安装Subversion ServerSubversion server binaries maintained by the Ubuntu Project. Packages include the Subversion client, and tools to create a Subversion repository and to make a reposito…

前端 滑动拼图校验 纯js组合式调用

前端 滑动拼图校验 纯js组合式调用效果思路代码效果 思路 独立滑块和拼图&#xff0c;通过实例方法组合使用,滑块和拼图均通过指定元素容器加载内容通过canvas 路径切片 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF…