欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于thinkphp开发的新闻管理后台和api接口开发

程序员文章站 2022-04-28 16:38:22
...

有了之前的教学管理基础,在这个基础上做了些优化,摇身一变,又变出了一个新闻管理系统,并且进行了api接口的相关开发。首先可以利用之前学的搭出基本样式如:

基于thinkphp开发的新闻管理后台和api接口开发

在这里对验证码的使用进行了优化。

/**
     * 设置验证码
     *
     * 参数	        描述	    默认
     * codeSet	验证码字符集合	略
     * expire	验证码过期时间(s)	1800
     * useZh	使用中文验证码	false
     * zhSet	中文验证码字符串	略
     * useImgBg	使用背景图片	false
     * fontSize	验证码字体大小(px)	25
     * useCurve	是否画混淆曲线	true
     * useNoise	是否添加杂点	true
     * imageH	验证码图片高度,设置为0为自动计算	0
     * imageW	验证码图片宽度,设置为0为自动计算	0
     * length	验证码位数	5
     * fontttf	验证码字体,不设置是随机获取	空
     * bg	背景颜色	[243, 251, 254]
     * reset	验证成功后是否重置	true
     * @return \think\Response
     */
    public function show_captcha()
    {
        $captcha = new Captcha();
        $captcha->fontSize = 25;
        $captcha->length = 4;
        $captcha->imageH = 0;
        $captcha->imageW = 0;
        $captcha->expire = 30;
        $captcha->useNoise = true;
        $captcha->reset = true;
        return $captcha->entry();
    }

一、图片上传

图片的上传有两种方式,1、上传到本地服务器;2、上传到七牛云服务器;这两种方法网上都有教程;这里展示下上传到七牛云的代码:

/**
 * 图片上传类库
 * @return null|string
 */
public static function image()
{
    if (empty($_FILES['file']['tmp_name'])) {
        exception('您提交的图片数据不合法', 404);
    }
    $file = $_FILES['file']['tmp_name'];
    $ext = pathinfo($_FILES['file']['name']);
    $ext = $ext['extension'];
    
    $auth = new Auth('ak的值', 'sk的值');
    $token = $auth->uploadToken('bucket的值');
    $key = date('Y') . "/" . date('m') . "/" . substr(md5($file), 0, 5) . date('YmdHis') . rand(0, 9999) . "." . $ext;
    $uploadMgr = new UploadManager();
    list($res,$err) = $uploadMgr->putFile($token, $key, $file);
    if ($err != null) {
        return null;
    } else {
        return $key;
    }
}

基于thinkphp开发的新闻管理后台和api接口开发

二、layui的分页

在之前的教学管理系统中主要是使用自带的分页功能,而在这个系统中,主要是使用了layui的分页功能:

文档参考:http://www.layui.com/doc/modules/laypage.html

相关代码:

//layui分页功能的调用
layui.use(['laypage','layer'],function () {
    var laypage = layui.laypage;
    var layer = layui.layer;
    var url = "{:url('admin/news/index')}" + "?{$query}";
    laypage.render({
        elem: 'laypage'
        ,count: '{$total}'
        ,limit: '{$size}'
        , theme: '#1E9FFF'
        ,curr : '{$curr}'
        ,layout: ['prev', 'page', 'next', 'skip']
        ,jump: function(e, first){ //触发分页后的回调
            if(!first){ //一定要加此判断,否则初始时会无限刷新
                location.href = url + '&page='+e.curr;
            }
        }
    });
});

三、AES加密

附上相关的类库,首先需要在自定义配置文件中写入AES的加密解密的**:

基于thinkphp开发的新闻管理后台和api接口开发

class Aes
{
    private $key = null;

    /**
     * 构造方法获取 key
     * Aes constructor.
     */
    public function __construct() {
        $this->key = config("app.aes_key");
    }

    /**
     * 加密
     * @param String input 加密的字符串
     * @param String key   解密的key
     * @return HexString
     */
    public function encrypt($input = '') {
        if(config('app_debug')) {
            $iv=substr($this->key,0,16);
        }else{
            $iv=openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
        }
        $data=openssl_encrypt($input, "aes-256-cbc", $this->key, 0, $iv);
        return base64_encode($iv.$data);
    }

    /**
     * 解密
     * @param String input 解密的字符串
     * @param String key   解密的key
     * @return String
     */
    public function decrypt($input) {
        $input=base64_decode($input);
        $iv=substr($input,0,16);
        $data=substr($input,16);
        $return=openssl_decrypt($data, "aes-256-cbc", $this->key, 0, $iv);
        return $return;
    }
}

对一些重要的信息可以进行加密生成sign和解密;主要是验证信息的真实性,主要是服务端和客户端共同完成,客户端负责加密,服务端进行解密,验证传来信息的正确性。比如对手机的型号、用户名进行加密生成sign当服务端解密后与传入的手机型号和用户名进行比较,判断是否正确。同时还应该对sign设置过期时间。当超出时效时,应当不予返回信息;

服务端通过AES解密获取数据,有了这个逻辑就可以进行编写了。

四、性能优化

在编写api接口时,同数据库查询一样,尽量不要使用select *这样的语句,需要用到什么就查什么,就新闻接口开发来说,新闻有自己详细的内容,只有当用户查看详细内容时才需要显示,一般情况下内容所占的篇幅较大,在列出所有新闻时,可以先不查询,提示查询的效率;

基于thinkphp开发的新闻管理后台和api接口开发

五、restful api

差点忘记说了,接口是使用restful api开发的,主要是在thinkphp中路由进行路由配置

使用方法:(:ver是版本号以便于版本升级)

Route::resource('api/:ver/news', 'api/:ver.news');

相关参考文档可以看:https://www.kancloud.cn/manual/thinkphp5/118035


相关标签: api接口开发