路飞学城-爬虫集训营-第二章

Web框架---Flask

  1.安装
     pip3/pip install flask

  2.文件结构
    project
      __init__.py
      static #静态
      templates #html文件
      views.py #视图
      run.py #运行
  3.简单使用
    1.在__init__.py创建初始化脚本
    from flask import Flask

    app = Flask(__name__)
    from app import views

    2.编写视图函数
    from app import app

    @app.route('/')
    @app.route('/index')
    def index():
      return "Hello, World!"

    3.执行脚本
    from app import app
    app.run()

    4.运行
    python3 ./run.py

  4.使用模板
    from flask import render_template

    @app.route('/login')
    def login():
      qcode = '给模板的数据'
      return render_template('login.html', qcode=qcode)

  5.管理会话 --- session
    session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证;
    

@app.route('/check/login')
def check_login():
    check_login_url = 'https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login'
    check_login_params = {
        'loginicon': 'true',
        'uuid': session['qrcode'],
        'tip': 0,
        'r': '-2034746127',  # 时间戳取反
        '_': int(time.time() * 1000)
    }
    response = requests.get(url=check_login_url, params=check_login_params)
    result = {'code': 408}
    if 'window.code=408' in response.text:
        # 用户没扫码
        result['code'] = 408
    elif 'window.code=201' in response.text:
        result['code'] = 201
        # 用户扫码了,获取头像
        result['avatar'] = re.findall("window.userAvatar = '(.*?)';", response.text)[0]
    elif 'window.code=200' in response.text:
        redirect_uri = re.findall('window.redirect_uri="(.*?)";', response.text)[0]
        redirect_uri = redirect_uri + '&fun=new&version=2'
        if 'wx2.qq.com' in redirect_uri:#有些微信需要wx2才能正常使用,判断返回URi是否wx2为后续准备
            session['host'] = 'wx2.qq.com'
        else:
            session['host'] = 'wx.qq.com'
        ret = requests.get(redirect_uri)
        ticket_dict = xml_parse(ret.text)
        session['ticket_dict'] = ticket_dict
        session['ticket_cookies'] = ret.cookies.get_dict()

        result['code'] = 200

    return jsonify(result)

  6.注意点

    1.注意不要用全局变量存cookie等重要信息要使用session

    2.重复的东西可以放进session或者g里

    

学习心得

  1.本章学习的是以实战为主,新知识点在Flask上,其他的知识点都在第一章上

  Flask中文文档:http://www.pythondoc.com/flask-mega-tutorial/

  2.初学者没学过框架在Flask大概会踩很多坑需要自己网上找很多东西

  3.学习新东西的时候一定要有耐心不要放弃,遇到问题多用搜索引擎和论坛找答案。不要找到一个答案就不找了多找点案例能多帮助记忆

  

基于Flask编写web微信
1.。。。。
1.微信ID不唯一每次登陆后会改变,所以登陆后需要再次获取ID
2.接收消息如果图片消息会无法接收,可分析接收到的json获取图片
3.微信消息近乎是实时,所以需要开个线程或者进程来循环获取

2.思路
1.通过分析wx.qq.com网页获取到二维码地址 显示在自己的前端
2.添加长轮询检测用户是否成功扫描二维码
3.检测用户是否点击登陆
4.登陆后为了后续需要的 把初始化数据和cookie放入session
5.根据API达到各种功能,比如 获取联系人,微信公众号,发送消息,接收消息,获取用户头像

3.实例
https://github.com/amongtheflowers/WebWX



猜你喜欢

转载自www.cnblogs.com/flower-poison/p/9298858.html
今日推荐