zoukankan      html  css  js  c++  java
  • 轮播组件/瀑布流/组合搜索/KindEditor插件

    一、企业官网

    瀑布流

    ​ Models.Student.objects.all() #获取所有学员信息

    ​ 通过div进行循环图片和字幕

    ​ 1.以template模板方法实现瀑布流以列为单位放置图片和字母信息:通过取余的方式分列,三列就对三取余,在templatetags里面自定义模板,但是对于前端创建的判断方法if,时不能使用@register.simple_tag,simple_tag方法不能用于if 后,所以引用filter方法:@register.filter

    ​ 2.以JS的方式实现瀑布流以列为单位放置图片和字母信息:通过JS进行求余运算实现瀑布流

    轮播图:

    轮播图bxlider插件:依赖于Jquery

    组合搜索

    ​ 目的是信息的查询过滤

    ​ models.Video.objects.filter() # 查询:使用字典进行组合查询,在前端通过类型id实现动态组合索引,最简单的组合查询方法,数据类型无关联

    示例:sparta(学习示例,非本人所写,就不发链接了)

    ​ 安装python2.7

    ​ pip2 install django==1.7.8

    ​ pip2 install Pillow

    二、博客系统

    ​ 个人博客注册

    ​ 个人主页

    ​ 个人后台管理

    ​ 主题定制

    ​ Editor(回存在XSS攻击)

    ​ TinyEditor(IE的)

    ​ UEEditor (百度的)

    ​ CKEditor(比较老的)

    ​ KindEditor(中文版的)

    ​ KindEditor:

    ​ 基本配置

    ​ 处理XSS

    ​ Beautifulsoup4模块使用

    三、Tornado

    ​ Web框架:Tornado

    ​ Tornado内置模块实现爬虫

    四、爬虫

    ​ requests模块:请求地址获取文件,模拟浏览器向服务端发送请求

    • requests.put()

    • requests.get()

    • requests.post()

    • requests.patch()

    • requests.delete()

    • requests.head()

    • requests.options()

    • requests.request()

    • allow_redirects参数,是否是否重定向

      # Author:wylkjj
      # Date:2020/2/23
      # -*- coding:utf-8 -*-
      import requests
      from bs4 import BeautifulSoup
      import json
      
      # requests发送get请求
      response = requests.get('https://www.bilibili.com/')
      # print(response.text)
      soup = BeautifulSoup(response.text, features="html.parser")
      text_list = soup.find_all(name='div', class_='item')
      print(text_list)
      
      
      # requests发送post请求
      form_data = {
          'phone': '+8615044487970',
          'password': 'adpsasfff',
          'loginType': 2,
      }
      
      # request 参数 
      response = requests.post(
          url='https://dig.chouti.com/login',
          data=form_data,    # 请求头为 content-type:application/x-www-form-urlencoded
          params={'eric': '123456'},  # 拼接后url http://www.baidu.com/?query=eric
          json=json.dumps({'user': 'eric', 'pwd': '12345'}),  # 请求头会改变content-type:application/json
      )
      print(response.text)
      
      # request 参数 
      requests.request(
      	method = "GET",
          url = "http://www.baidu.com",
          params = {'query':'eric'},  
          data={},  # 数据传输,get用不到,post时把data数据放到请求体中传输到后端
          header={
              'referer': 'https://www.zhihu.com/signin?next=http%3A%2F%2Fwww.zhihu.com%2Fpeople%2Feric-wijing',
              'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3970.5 Safari/537.36'
          },  # 当requests访问被拒绝时,设置header中的Referer或'user-agent',因为可能是他们两个参数的问题,在network发送请求后的Header中
          cookies={},  
      )  
      
      # request 参数 
      response = requests.get(
          url='https://i-beta.cnblogs.com/settings',
          # 获取已登陆的信息
          cookies={'.CNBlogsCookie':'93C26874509F65701B9F02163426CC74B23CDE7B9383331E04AEA2BEA2FEBEB0E3DA7F41FAF308FB36B946F007B8981D38AFE66E2042A6A80D2E5BF31E45BCECF0A3343E9AA83FDDCC155278666854E135E069A3',},
          cert:'证书文件'  # 有些网站需要证书才能获取数据
      )
      print(response.text)
      

    ​ beautifulsoup:数据区提取(格式化)

    ​ 使用方法:引入from bs4 import BeautifulSoup,创建对象:soup = BeautifulSoup(html_doc, features="html.parser"),html_doc是要解析的对象,features="html.parser"是解析器,最快的解析器是lxml解析器,不过需要自行安装,html解析器是python内置的解析器;

    ​ soup.children的方法是获取所有模块,只不过只会寻找第一层body ;

    ​ soup.body.children会寻找出body所有的元素(body的下一层);

    ​ for tag in soup.body.descendants:循环tag.name能获取标签的类型属性(有div,就会获得其属性div),单独输出tag,循环遍历出所有标签;

    ​ from bs4 import Tag:遍历的每一个标签,获取其属性,可用其判断获取所有元素的属性;循环tag.name能获取详细的标签类型属性(有div,就会获得其属性div);tag.attrs可以获取所有的标签内部的所有属性对其进行增删改查操作。

    ​ soup.html.hidden = True;soup.head.hidden = True ;显示出隐藏的标签,如果不设置此属性,在进行soup操作时不会读取出hidden隐藏的内容。

    # Author:wylkjj
    # Date:2020/2/23
    from bs4 import BeautifulSoup
    from bs4 import Tag
    # Create your views here.
    html_doc = """
    <body>
    <div class="bili-banner1" style="background-image: url(&quot;//i0.hdslb.com/bfs/archive/7197cae46569a49abd98e0c51348068831be6a85.png&quot;);" data-v-5ff46558=""><div class="taper-line" data-v-5ff46558=""></div><div class="b-logo b-wrap" style="margin: 0" data-v-5ff46558=""><a href="//www.bilibili.com" class="head-logo" data-v-5ff46558=""><img src="//i0.hdslb.com/bfs/archive/1be2fd76cc98cdc6a595c05c3134fbf937a1c126.png" class="logo-img" data-v-5ff46558="">123456789</a><!----></div><!----></div>
    <div class="bili-banner2" style="background-image: url(&quot;//i0.hdslb.com/bfs/archive/7197cae46569a49abd98e0c51348068831be6a85.png&quot;);" data-v-5ff46558=""><div class="taper-line" data-v-5ff46558=""></div><div class="b-logo b-wrap" style="margin: 0" data-v-5ff46558=""><a href="//www.bilibili.com" class="head-logo" data-v-5ff46558=""><img src="//i0.hdslb.com/bfs/archive/1be2fd76cc98cdc6a595c05c3134fbf937a1c126.png" class="logo-img" data-v-5ff46558="">123456789</a><!----></div><!----></div>
    asdfasfasdfasdf
    <a>123456</a>
    <h3>123456</h3>
    <div class="bili-banner3" style="background-image: url(&quot;//i0.hdslb.com/bfs/archive/7197cae46569a49abd98e0c51348068831be6a85.png&quot;);" data-v-5ff46558=""><div class="taper-line" data-v-5ff46558=""></div><div class="b-logo b-wrap" style="margin: 0" data-v-5ff46558=""><a href="//www.bilibili.com" class="head-logo" data-v-5ff46558=""><img src="//i0.hdslb.com/bfs/archive/1be2fd76cc98cdc6a595c05c3134fbf937a1c126.png" class="logo-img" data-v-5ff46558="">123456789</a><!----></div><!----></div>
    </body>
    """
    # python内置解析器,但lxml使用时解析最快,需要安装
    soup = BeautifulSoup(html_doc, features="html.parser")
    # tag1 = soup.find(name='a')
    for tag in soup.body.descendants:
    # for tag in soup.body.children:
    # for tag in soup.children:
        if isinstance(tag, Tag):
            # print("属性:", tag.name, tag.attrs)
            pass
    tag1 = soup.find(name='a')
    del tag1.attrs['class']
    print(tag1)
    print(soup)
    
    tag1 = soup.find(name='a')
    tag1.clear()
    print(tag1)
    print(soup)
    

    ​ 单例模式:使用一个对象进行操作

    # Author:wylkjj
    # Date:2020/2/23
    # -*- coding:utf-8 -*-
    
    # 创建单例模式第一种方法
    class Foo:
        __instance = None
    
        @classmethod
        def instance(cls):
            if Foo.__instance:
                return Foo.__instance
            else:
                obj = Foo()
                Foo.__instance = obj
                return Foo.__instance
    
    
    obj1 = Foo()
    obj2 = Foo()
    print(obj1, obj2)
    
    
    # 创建单例模式第二种方法
    class Fo(object):
        __instance = None
    
        def __init__(self):
            pass
    
        def __new__(cls, *args, **kwargs):
            if cls.__instance:
                return cls.__instance
            else:
                obj = object.__new__(cls, *args, **kwargs)  # 创建类
                cls.__instance = obj
                return cls.__instance
    
    
    obj3 = Fo()
    obj4 = Fo()
    print(obj3, obj4)
    
    

    ​ scrapy框架:爬虫框架

    五、Web微信/微信公众平台登录

    只是在网页端允许登录时可以使用,但是由于微信取消了网页端的登录,无法实现,纯属个人喜好,理解理解。

    轮询:

      客户端定时向服务器端发送 Ajax 请求,服务器端接收到请求后马上返回信息并关闭连接。缺点是:有延时,无法满足即时通信的需求。

    长轮询(Comet):

      客户端向服务器端发送 Ajax 请求,服务器端接收到请求后保持住连接,直到有新消息才返回响应信息并关闭连接。客户端在处理请求返回信息(超时或有效数据)后再次发出请求,重新建立连接。缺点是:服务器保持连接会消耗较多的资源。

    WEB微信页:

    • 访问页面出现二维码
    • 长轮询监听是否已经扫码并且点击确认
    • 如何进行会话保持
    • 如何获取用户列表
    • 如何发送消息(接受消息)

    微信二维码获取地址的前缀:https://login.weixin.qq.com/qrcode/{0}

    由于现在无法进行操作,其它内容就不编辑了

  • 相关阅读:
    linux常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/wylshkjj/p/12356471.html
Copyright © 2011-2022 走看看