zoukankan      html  css  js  c++  java
  • Python学习之==>URL编码解码&if __name__ == '__main__'

    一、URL编码解码

      url的编码解码需要用到标准模块urllib中的parse方法

    1 from urllib import parse
    2 url = 'http://www.baidu.com?query=python基础教程 $%^&'
    3 url_str = parse.quote_plus(url)  # url编码
    4 baidu_url = 'http%3A%2F%2Fwww.baidu.com%3Fquery%3Dpython%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B+%24%25%5E%26'
    5 baidu_url_str = parse.unquote_plus(baidu_url)  # url解码

     二、if __name__ == '__main__'

      Python不同于C/C++,程序并不需要执行主程序main()这样的程序入口,而是文件自上而下的编译执行。在很多Python程序中都会有下面这样的语句:

    1 if __name__ == '__main__':
    2     pass

      这条语句的作用是判断这个Python文件是别的地方导入的还是直接运行的,一般是调试代码的时候使用,在它下面会写一些调试的代码。如果直接运行这个文件就会执行它下面的调试代码,如果通过其他文件导入这个文件执行,就不会运行它下面的调试代码,因为直接运行这个文件时,__name__的结果就是__main__,可以通过print(__name__)来验证。

    三、练习

    签名规则计算:

    1、请求数据:vendorId=100&ip=127.0.0.1&Version=2.0&mac=D4-81-D7-CA-20-29

    2、商家编码:vendorId

    3、计算规则:

      (1) 将商家编码(vendorId)进行2次md5加密,得到一个字符串Astr
      (2) 再将请求数据进行一次urlDecode处理,得到一个字符串urlDecodeStr
      (3) Astr+urlDecodeStr再进行一次md5加密获得最终的签名

     1 from urllib import parse
     2 import hashlib
     3 class Sign(object):
     4     def __init__(self,req_data):
     5         self.req_data = req_data  # 这写了self的话,在其他的函数里面也可以用self.xx
     6         self.get_vendorId()       # 构造函数中调用类里面的函数
     7         self.get_sign()           # 构造函数中调用类里面的函数
     8     def my_md5(self,str):
     9         md = hashlib.md5()
    10         md.update(str.encode())
    11         return md.hexdigest()
    12     def get_vendorId(self):
    13         data_dic = {}
    14         sub_str = self.req_data.split('&')
    15         for i in sub_str:
    16             data_dic[i.split('=')[0]] = i.split('=')[1]
    17             self.vendorid = data_dic.get('vendorId')
    18     def get_sign(self):
    19         Astr = self.my_md5(self.my_md5(self.vendorid))  # 两次md5加密
    20         urlDecodeStr = parse.quote_plus(self.req_data)  # url编码
    21         beforeMD5 = Astr + urlDecodeStr
    22         self.sign = self.my_md5(beforeMD5)
    23         return self.sign
    24 
    25 if __name__ == '__main__':
    26 # 请求数据:
    27     s = 'vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;'
    28 # 实例化:
    29     s_sign = Sign(s)
    30     print(s_sign.get_sign())  # 构造函数里面如果没有调用,这里需要调用函数
    31     print(s_sign.sign)        # 构造函数里面如果已经调用了函数,这里可以直接用返回值

    此时直接运行该文件的结果为:

    afaa051aa024628edf92c85b66f3eefe
    afaa051aa024628edf92c85b66f3eefe

    如果是以模块的形式导入运行该文件,则if __name__ == '__main__'下面的这几行代码不会执行

  • 相关阅读:
    【转载】VM Role实战: Azure 平台上传虚拟机C 盘不能大于64GB
    Asp.Net MVC项目编译View
    Notepad测试数据库连接
    【转载】使用远程桌面Remote desktop访问Azure虚拟机
    【转载】Azure Blob Storage 云存储中实现大文件分块断点续传
    jQuery Mobile 笔记(1) jQuery Mobile页面结构
    【转载】使用Azure SDK 1.6 ,VM Role里加载Azure Drive方案
    大把大把的时间 你要怎么把握啊
    asp.net 本质论学习
    在客户端用javascript或VBSCRIPT生成WORD文档(转)
  • 原文地址:https://www.cnblogs.com/L-Test/p/9260568.html
Copyright © 2011-2022 走看看