2020/03/22 03-博文发布功能实现
博客要完成的相关的功能:
发布页,采用post方法提交到后台,应该用/post/pub,只不过我们做api代理转发,要提交title,content,返回json,json里返回postid。
下面是/post/id,get方法,返回对应id的文章,有就返回,没有就想办法判断,处理404。
如果直接对/post/发送请求,相当于getall
第一个写pub这块
pub主要是提交,返回成功了还是失败
发布组件采用form表单组件,antd提供了很好的组件
用多少组件就放多少style
现在是这样
现在想要把标题挪到前面去
动态校验规则这里有个例子,这是一个对象,对象里有两个东西,一结构就是我们想要的
拷贝过来,下面开始解构,解开就是谁等于谁
启动下服务
这样就可以了
看一下这里到底什么意思
一样的效果,所以这就是解构的意思
解构就是解成kv,value是个对象
改成14
宽了一些
其实就是14列的意思
分为label部分和wrapper部分,各控制各的
这一块跟bootstrap差不多,为布局定义了一套东西
这就是栅格
是基于24栅格的一套系统,可以想象成在竖向切割成24个单位
分成24个格子
如果你的区域就这么,是指把这里分24个格子
boostrap也是这么用的,栅格系统,在占的宽度的时候,就可以直接指定占几个单位,这个单位实际上就是整个宽度来说的
这是form的大小
这里指定占的宽度是百分之80
也就是在这80%宽度里,再分24个,4个占多少,刚才是4个+14个=18个,还剩6个栅格
加在一起24个正好,现在是都用栅格系统来进行布局
两个写法都行
这样直接写,好处就是下面解构就可以了
还少一个check
这个是想要的
网页里真正写的是input,type=submit vlaue就是按钮显示什么字
点击会触发表单的事件,onsubmit,就会将表单内有name的控件组织成kv对的形式,中间用&符号链接,如果使用post方法,放在请求的body内送到服务端
要把默认提交的行为阻止,然后我们用ajax的方式,拿到数据与后端进行通信,然后再通过回调的方式来显示数据
写成这样
提示0是没有定义的
先把target打印出来到底是什么
我们前面是target.form,这里直接target
产生事件的对象是完全不一样,以前是点击按钮的onclick,现在是表单自己的submit,这里实际是form提交,因为你的事件是在form上的,target本身不是按钮了,而是form本身了
直接数据解构得到两个东西
拿到两个控件
拿到这两个值取出来往后传即可
到service里的post,拿到title,content,然后成功不成功
没绑定,this的问题
所以有时候抄过来还不行,还需要改动下
8000端口没开
504和502都是上游服务器的问题
offset写个6看看
左边是偏移几个单位,后面是占多少个单位,分两部分,各自调整宽度来做控件的定位
buttom蓝颜色就是primary
可以改成虚线的,danger危险的
type=什么你写就可以了
绑定this,就可以发送数据了
400就对了
认证的时候,失败也会产生一些问题
没有token这就直接出现问题了
看看调用哪里去了
有个中间件
在user/views下,这边有加号
把settings把里面去掉,因为这个中间件替我们拦住了
重启一下服务
还是400
看看打印什么
这次看看是否是打印这块
no token就回来了
message回来了,但是pub里没有引用
return里处理一下
有错误就这么走
提交失败就对了
在response里有返回,是放在body里去的
现在提交过去了,但是没有任何成功的迹象,原因是你提交了一篇文章,但是作者不知道,这个信息是在jwt里的,把这些信息删掉,一个不留
再次打开,token什么都不在
登录成功后会发一个带过期时间的token,而这个token是在登录成功后塞入到local storage里了,现在localstorage里是没有
需要登录一次
token就有了
认证里要从meta去它
这里会封装成http_jwt,发的时候还是按照jwt发,在request的header部分,要在header部分发jwt才可以,之前是借助postman
到官网看一下
config也许用得上
查看快捷方法,可能有一些自定义头
要写第二个必须 第三个
可以创建一个实例,定义baseurl,url基础版
还可以自定义头
也就是可以把自定义好的东西作为一个实例
然后这个实例可以继续调用get,相当于预设了一些参数,得到了一个自定义的实例,这个实例再去调用get这些方法
config就是请求配置
请求配置里能写url,还可以写请求的方法,还可以再写baseurl
可以再写header
还可以写一些认证的
先试试这个能不能用
创建一个实例,单独重写一个,header可以写在这里也可以不写在这里
这次不写在这里
在传输数据的时候有三部分,第一部分就是url,现在的url是前面的基础部分可以不写了
第一步写url,第一部分data,第三部分config配置是一个对象,在这个对象中可以写很多kv对,我们要写jwt,身份验证的时候才提交这个,不做身份验证的时候就没必要提交,在post时候就要告诉jwt是谁
针对某些方法里才需要加一个头,get方法就不需要写
所以这里就把baseurl写在这里了
jwt写好了,下面可以写方法,这就是怎么去拿token值
拿到这个token值就可以把这个token值带到post的header部分传过去,对方就可以拿到这个值了
刚才已经登录过一次了,现在有语法错误
加一个this
把super去掉,这里没有继承
现在application是有值的
这个值,现在就准备取出来,拿到之后,通过header,传到后面去
这是给post传了三个参数,第一个参数是url,这个是相对的,要基于baseurl,第二个是提交的数据,第三个是config,定义了一个header,jwt,这个jwt会被wsgiserver拿到,包装后再被request封装,会在jwt里加一个前缀,HTTP_JWT,这样就可以拿到了
拿到后就可以打印一下
看看最后能否打印想要的东西
我们把字符串拿到了,拿到值了但是解不开
现在把值还原出来,现在准备把这个值发送到服务端去
现在就成功了
第5条就出来了
头有两种方式,一种是把头塞到这地方来写,也就是所有人都用这个头,get的时候也有这个头,但是实际上get的时候不需要
所以在post的时候才把头提交上去
这时候就提交成功了,只要加身份验证即可
这里是怎么写组件,还有消息是怎么展示的
稍微修改下
这里需要一个jwt,jwt传的时候要在header当中
axios的特殊写法,baseurl说明是拼接的,这实际上就是字符串拼接方式
注意,如果这里是以跟开头的,如果是axios就跟它没关系了
这里就利用它了
这样是两个全新的,跟上面的两个无关
这个post直接写pub就不行
写了this,就可以基于baseurl
这里没改还是用原来的东西
用的是它的路径加上header,用getjwt拿到jwt
通过这个方式就可以把pub拿到了
在前端用token的时候一定要验证是否过期,看看token在store中是否拿回来过期了,如果过期就清除掉
加上过期验证,然后加上所谓的清理,也就是remove,token.remove,把key给它就行了,就可以清除掉了,先做一次验证然后再remove就可以了
如果发现过期了,清除了,可以return空的,下面jwt一发就出错了