董俊俊 的个人动态
  • 董俊俊 回答了问题
    3个月前

    微信公众号静默获取无法获得新用户的unionid

    只有已关注用户才可以静默的情况下 openid 换 unionid。

    未关注用户只能通过用户主动授权的方式拿 unionid。当然了,对于虽未关注,但已经授权过的用户,一段时间内不用用户再手动点一下“授权”按钮了,进到授权页后微信自己会跳。

  • 董俊俊 回答了问题
    3个月前

    Laravel中User Model 里面的 sendPasswordResetNotification ( ) 在什么时候调用?

    我跟着线索找了一下,不知道对不对,sendResetLinkEmail 这个方法定义在 SendsPasswordResetEmails 这个 trait 中。

    public function sendResetLinkEmail(Request $request)
        {
            $response = $this->broker()->sendResetLink(
                $request->only('email')
            );
        }

    在执行的过程中会调用 sendResetLink() 这个方法,找到在 Illuminate/Auth/Passwords/PasswordBroker.php 中的定义,执行过程中会又会调用:

            $user->sendPasswordResetNotification(
                $this->tokens->create($user)
            );

    看看 $this->tokens 是怎么构造的:

    public function __construct(TokenRepositoryInterface $tokens,
                                    UserProvider $users)
        {
            $this->users = $users;
            $this->tokens = $tokens;
        }

    可以看到传入了两个参数,其中和 token 有关的参数是 TokenRepositoryInterface $tokens,token 是通过 TokenRepositoryInterface 这个接口产生的,转而寻找实现这个接口的类,然后找到 Illuminate/Auth/Passwords/DatabaseTokenRepository.php,其中就有 create() 这个方法:

     public function create(CanResetPasswordContract $user)
        {
            $email = $user->getEmailForPasswordReset();
    
            $this->deleteExisting($user);
    
            $token = $this->createNewToken();
    
            $this->getTable()->insert($this->getPayload($email, $token));
    
            return $token;
        }

    就是在这里完成了 token 的生成,同时写入数据表,返回这个 token,既然知道这个 token 是怎么来的了,反过来就是 token 出现在邮件中的过程了。
    第一次用 markdown,排版效果可能不理想,望谅解。

  • 董俊俊 回答了问题
    3个月前

    Java如何抓取ajax生成的页面

    如果说是要抓js生成的页面,貌似没有这方面的类库(本人去年在用程序模拟新浪微博登录的时候找过,没找到。。。)
    不过有可以解析javascript语句的java类库

    你可以先对页面进行分析,然后确定哪些数据是必须的,即使是ajax动态加载的,数据也是可以获取到的,只是展现形式不同罢了

  • 董俊俊 回答了问题
    3个月前

    Java如何抓取ajax生成的页面

    可以直接用浏览器查看ajax请求的URL,直接down这个就好了

  • 董俊俊 回答了问题
    3个月前

    Java如何抓取ajax生成的页面

    这个我当时遇到的一个情况是,ajax传回来的是一大堆json,然后前端js动态解析这些出来,我的目的是获取解析之后的数据,这样比较直观。
    我用的selenium webdriver,自动化测试的一个东西。

  • 董俊俊 回答了问题
    3个月前

    如何用 Python 快速插入数据到数据库中?

    后台默默执行吧,这个确实没有什么好办法,如果单台数据库的话,并发的w请求取决于db,所以是有限的.建议开启写个脚本后台去执行.

  • 董俊俊 回答了问题
    3个月前

    如何用 Python 快速插入数据到数据库中?

    1) mysql用集群而不要用单机版
    2)试着修改mysql的存储引擎,当然这影响数据恢复的策略
    3)表是否设置了主键或索引影响插入速度
    4)采用数据二次提交的方式,也就是关闭默认的autocommit,设置为0,然后每插入10000条再commit一下,采用这种方式起码每秒处理1w条的性能还是有的
    5) 换硬盘,上raid或SSD,这个严重影响数据写入速度
    6) 还可以试试用load data的方式,适合将现有的文本数据导入

  • 董俊俊 回答了问题
    3个月前

    nginx 动态读取多文件夹下index.html

    server {
      listen 80;
      root /app;
      location / {
        index index.html;
      }
    }
  • 董俊俊 回答了问题
    3个月前

    tp 使用路由访问时总是不成功

    resume/:id 你这不后面还需要一个参数嘛,如果参数是可选的,那就改成 resume/[:id] 。

  • 董俊俊 回答了问题
    3个月前

    vue请求本地后台接口提示跨域怎么办?

    http://localhost 和 http://localhost:8080 这是不同域。

    协议、主机、端口,三者全都一样才叫同域。有一个不一样就是跨域。

    不知道你这个后台是啥写的,找一下对应语言或框架支持 CORS 的写法吧。

    看报错信息应该是处理 OPTIONS 请求时没能正确返回 Access-Control-Allow-Origin 这个响应头导致的。

    一般来说返回通配符 * 可以。但如果你这个接口还会接收 Cookie,那就必须返回请求者所处的域(对于你这里而言就是 http://localhost),而不能用 *

    你说的昨天正常今天不正常,看一下是不是今天多了 Cookie?

  • 董俊俊 回答了问题
    3个月前

    sequelize的findAll如何用?

    传空不就相当于没 where 条件么,可不就返回所有结果了么……

    你可以给 myId 强行赋一个数据库不会存在的值,比如 0 啥的, { where: { id: myId || 0 } }


    补充回答:

    我只是给个侵入性最小的方案而已,基本没啥改动、还能保留了返回结果的强类型。

    如果从工程角度出发的话确实 @糟老头 是对的,应该做一层封装。

  • 董俊俊 回答了问题
    3个月前

    Datatables ajax返回的数据顺序与表格中的数据顺序不一致

    解决了吗?我今天遇到一模一样的问题..
    更新:额.加入bSort:false就可以了

  • 董俊俊 回答了问题
    3个月前

    Golang 不确定传参

    类似的问题我回答过好几次了,这个问题真的是经常有人问啊。

    对于 json 格式数据的解析,如果其中的某个成员结构不确定,我总结一般有几种方式处理。

    第一种,最容易想到的就是,将那个不确定的成员用 map[string]interface{} 替代。其他人的回答都提到了,怎么操作就不赘述了。但问题是,这种方式太坑,每次都要做类型断言,还要检查一次是否 ok,真的是太坑。

    第二种,既然 map[string]interface{} 的方式太坑,那如果要是能用结构体就好了,虽然其中某个成员的结构不确定,但如果共性字段比较多,比如都是与人相关,那肯定都有名字,年龄之类的字段,但如果是教师和学生,就会有一些不同的字段,把所有的不同字段都包含进来即可。但如果不同字段太多,那也不是很方便。

    第三种,终极解决方案,如果能先解析第一层的结构,再根据第一层的结果,确定第二层的结构,那就方便多了。不确定的成员依然用 map[string]interface{} 表示,确定结构后,再将 map[string]interface{} 解析为具体的某个结构。结构体使用起来就方便很多了。

    问题最终就变成了如何将 map[string]interface{} 转化为 struct,这个过程必然会用到反射,可以自己实现。但其他人早造就想到了,一个第三方库,地址:https://github.com/mitchellh/... 。

    之前写过一篇文章,和这个问题相关,建议去看看,Go 中实例演示 json 的 map 和 struct 便捷处理转化,里面简单介绍了 mapstructure 的使用。

  • 董俊俊 回答了问题
    3个月前

    laravel的blade模板如何生成静态化页面?

    解析开始是由__toString()触发的

    解析过程中是用ob_start实现的,使用了很多次ob_start

    你可以看下Illuminate\View\View这个类

    也可以调用Illuminate\View\View__toString()方法来生成静态页面,如下:

    <?php
    $htmlStrings = view('viewPath')->__toString();

    对于laravel 5(4应该也差不多)

  • 董俊俊 发布了文章
    3个月前

    如何选择 Laravel 框架版本

    说明 很久以前在一个话题里面聊到的观点,很多同学在 Laravel 版本选择时候比较混淆,这里说下我的看法。 对 Laravel 框架发布周期不熟悉的同学请参阅 -&nbsp;Lara
  • 董俊俊 回答了问题
    3个月前

    前后端分离,前端如何判断登录状态?

    我那时候做项目,前后端分离用的是 JWT,把后端生成的 JWT token 存入 localStorage,然后前端切换路由(刷新页面)的时候,通过 Ajax 去后端判断当前的 token 是否有效,还有一个就是在发送Ajax 请求的时候带上这个 token。

  • 董俊俊 回答了问题
    3个月前

    PHP和vue做前后端分离,登录状态怎么记录。

    登录成功之后你返回前端一个加密的字符串token, 把这个token对应的值写入redis 后续前端的请求都要携带这个token 后端做判断即可

  • 董俊俊 回答了问题
    3个月前

    PHP和vue做前后端分离,登录状态怎么记录。

    1. Vue请求php登陆,验证通过之后,PHP返回一个token的JSON,可以使用JWT来做,Vue拿到这个Token存储在localStorage
    2. Vue请求登陆后的接口时,在请求头放入第1步的token
    3. PHP读取请求头,使用JWT解出数据
  • 董俊俊 回答了问题
    3个月前

    在浏览器的cosole控制台输入一段代码,能把页面的dom元素用不同的线标示出来,就是border

    <script>
        (function() { 
            const style = document.getElementById('outlineStyle'); 
            if (style) { 
                style.parentNode.removeChild(style); 
            } else { 
                const style = document.createElement('style'); 
                style.innerText = '* {outline: 1px solid red}'; 
                style.id = 'outlineStyle'; 
                document.head.appendChild(style); 
            } 
        })();
    </script>

    新建一个书签,将上面的代码代码作为网址保存.
    点击书签打开调试模式,再次点击关闭.

    不要用上面的那位的代码,性能差,dom多可能会卡顿.而且用border会导致盒模型扩大,使页面变形.

  • 董俊俊 收藏了文章
    3个月前

    [学习笔记] Laravel消息通知流程梳理

    当我进行对一个帖子回复评论的时候,经过路由到达 reply 评论控制器下的 store 方法,这个方法接收数据进行保存。 保存完成后,事件观察器启动 created 方法启动,这个观察器接收
最近访客
  • 小花花
    小花花 4周前