自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 python中_与__的区别

1.单下划线(伪私有,声明私有)伪私有变量:变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,只是一种约定,不要随意访问。2.双下划线(变量或方法)变量前的双下划线表示真正的私有,实际上的私有,只有内部可以访问,但是可以通过在类中自定义方法进行操作>>> class MyName:... _name = "w1"... __namedede = "w2"... >>> print(MyName._name)w1&

2021-01-07 09:57:17 989 3

原创 python使用元类和weakref创建缓存实例

一:缓存实例的意义?缓存实例,简言之,使用相同参数时只创建一个实例,避免内存浪费等,如:import loggingaa = logging.getLogger('foor')bb = logging.getLogger('foor')print(aa == bb)# True,aa和bb其实是同一个实例二:使用元类和wearkref实现缓存实力。import weakrefclass Cached(type): def __init__(self,*args,**kwarg

2021-01-07 09:24:27 239

原创 sqlmap检测SQL注入及解决方案(Django)--超详细

一:场景、演示场景:查询等拼接SQL和参数的问题,博主为了检测,这里写一个有注入风险的接口,请勿模仿class PostMan(View): def get(self, request): aa = request.GET.get('aa') with connections['default'].cursor() as cursor: sql = 'select * from sys_dict where pid = %s'%(aa)

2021-01-07 09:11:41 1059

原创 字典表设计及Django中的实现--超详细

一:字典表使用场景维护系统中的某些变量,特别是后期可能修改的变量。如果这些变量写死在代码里面将会变得难以维护,所以要将其从代码中抽离出来。前端下拉框,多选框等用户交互数据。维护目录树,分类等。二:字典表设计CREATE TABLE `sys_dict` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `pid` int(11) DEFAULT '0' COMMENT ' 父ID ', `dataName` varchar(2

2020-12-18 15:30:57 1073

原创 Django中使用jwt--超详细

一:什么是jwt?jwt被广泛用于各类鉴权中,其中jwt token如下所示:b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkaW1uIn0.MeQOdDiiI39mBpgbFNnBVNdJMDhUpRTxziPeFJKB2fA'jwt token  JWT生成的Token是一个用两个点(.)分割的长字符串  点分割成的三部分分别是Header头部,Payload负载,Signature签名:Header.Payload.Sig

2020-12-15 09:21:05 5709 4

原创 Django全局异常捕获中间件

一:收集全局异常的意义?系统总有些错误和异常是意料之外的,需要收集相应信息,并返回错误(避免无响应),这里采用中间件的方式记录所有异常信息,包括请求体等信息。二:配置中间件的使用以及logging的配置不再赘述。直接上代码(记得将LogMiddle添加到settings):这里捕获异常,并返回json格式信息,class LogMiddle(MiddlewareMixin): """ 全局错误日志中间件 """ def process_exception(self,

2020-12-15 09:03:12 1182 2

原创 反爬虫五:js参数加密

一:什么是js参数加密js参数加密是在请求中对部分参数进行加密,或引入新的加密参数,从而你保障接口安全,增加接口破解难度,特别一些无登录的网站。本文将以有道翻译的js加密实现为例有道翻译js加密逻辑有道翻译请求参数如下:其中的salt,sign,lts都是js 加入的参数。其加密方法的js代码在其main.js 摘取部分如下:function(e, t) { var n = e("./jquery-1.7"); e("./utils"); e("./md5");

2020-12-14 11:16:30 1506 1

原创 反爬虫四:检测selenium特征值

一:selenium 特征值是什么?及特征值监测意义selenium是爬虫常用的手段之一,绕过各种js懒加载,模拟用户操作,拖动滑块验证码等,如某宝就有selenium 检测,当使用selenium去某宝或其他网站进行爬虫或者模拟登陆时,会出现滑动验证码,并且无论是用ActionChains滑还是手动滑,都会很委婉的告诉你“哎呀网络错误,请刷新”等等。打开终端 console,输入 window.navigator.webdriver 可见返回trueselenium特征值有很多:window.

2020-12-14 11:02:47 1468 1

原创 反爬虫三:检测鼠标移动轨迹

一:检测鼠标移动轨迹场景部分爬虫使用selenium,airtest等,模拟用户点击等操作,以及在滑块验证码等,这时候通过检测鼠标移动轨迹,将可以在一定程度上检测出机器人,并触发反爬措施二:逻辑与实现方式基于监听 mousemove 事件,触发,记录鼠标坐标,验证逻辑如下:鼠标移动位移不连续多次点击相同位置点击等操作前 无位移,或位移触发次数少于阈值三:实践前端代码示例:从左侧进入,未检测到位移,直接点击,则认为是机器人,使用中将按钮放置div 中间,或检测在body中的移动轨迹。&l

2020-12-14 10:44:52 4803 1

原创 反爬虫二:反调试实践

一:终端与反调试说明终端方便了开发调试,但也为很多爬虫提供了便利,在终端可以轻松看到各类请求、dom、js事件等,还能做一些调试工作,使用xpath插件和终端进行取值,也是博主常用的手段。反调试将在一定程度上增大爬虫难度,同样配置也很简单二:配置反调试只需要一段js代码:将js引入页面即可,此示例在打开调试时将跳转百度。var element = new Image();Object.defineProperty(element, 'id', { get: function () {

2020-12-14 09:37:17 265 1

原创 反爬虫一:robots协议实践

一:什么是robots?Robots协议,又称作爬虫协议,机器人协议,全名叫做网络爬虫排除标准(Robots Exclusion Protocol),是用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取,通常为一个robots.txt文本文件,一般放在网站的根目录下。如:https://www.jd.com/robots.txt二:基本语法User-agent:Baiduspider(描述了搜索爬虫的名称,这里为Baiduspider,代表设置的规则是对百度爬虫是有效的,如果有很多条的User-

2020-12-14 09:28:22 759

原创 真香-- 基于schema的复杂请求参数,请求体,字典校验方法

你还在怎么校验请求体,请求参数,复杂嵌套字典?if…else…,for…,oh No,小心leader给你加“鸡腿”,今天给大家分享一种博主使用很久的参数校验方式。具有无限嵌套一次校验,配置简单可读性高,兼容函数等诸多有点场景:校验以下格式的示例参数my_data = { "header_data": { "user_name": { "first_name": "请关注下面这个公众号", # 必填 全中文,少于20字 "seco

2020-12-04 09:54:43 1120

原创 有道翻译js加密破解js逆向

有道翻译js加密破解声明:仅用于技术学习交流,不针对任何网站,不得用于非法用途,本人不负任何相关责任。一:准备阶段有道翻译网址:http://fanyi.youdao.com/打开终端network,多次输入内容进行翻译,可见翻译接口:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule,查看请求体内容如下:经多次测试,发现关键参数应有四个:salt:变化sign:变化lts:变化bv:猜测是

2020-12-02 16:04:23 253 2

原创 Django Pycharm 修改html后立即刷新页面

Django Pycharm 修改html后立即刷新页面写项目时需要页面实时刷新,而不是频繁人肉重启项目。测试过dj-static,django-livereload-server,此处使用livereload包,简单好用。仅在debug=False时生效,不过可以满足调试需求了。安装pip install livereload如果报错:Using legacy ‘setup.py install’ for livereload, since package ‘wheel’ is not in

2020-11-25 09:14:54 2513

原创 1129, “Host ‘100.79.161.98‘ is blocked because of many connection errors

1129, "Host ‘100.79.161.98’ is blocked because of many connection errors;通常是mysql 连接数太多导致的解决:flush-hosts 清除缓存,mysql终端执行此命令即可修改mysq连接数限制show global variables like '%max_connect_errors%';set global max_connect_errors=1000;# 永久修改,修改配置文件,添加:max_conn

2020-11-24 10:01:25 120

原创 Django sql注入及解决方案

Django sql注入及解决方案前言:sql注入多产生在拼接sql语句的场景,对数据库进行越权访问或其他危险操作,危害极其严重,本文介绍在django中sql注入的预防措施。示例:简单的查询语句:my_connection = connections['default']with my_connection.cursor() as cursor: sql = "select * from my_table where id=%s limit 10"%(pk) cursor.exe

2020-11-24 09:46:07 2426

原创 Django接口缓存私有化缓存

Django 接口缓存Django业务中部分接口,需要优化相应速度,减少db压力,采用django-api-cache来做接口缓存,实测配置简单,效果很好,上代码一:安装pip install django-api-cache二:在此使用redis做缓存,也可使用django的其他缓存pip install django-redis# settings.py 中加入如下配置CACHES = { "default": { "BACKEND": "django_redi

2020-10-30 15:29:19 509

原创 Django定时任务

Django定时任务安装django-crontab并加入到settings.py的INSTALLED_APPSpip install django-crontabsettings.py中加入django-crontab的命令即可,命令参考linux crontabCRONJOBS = [ ('47 11 * * *', 'django.core.management.call_command', ['closepoll'],{},'>> /var/run.log'),]

2020-10-30 11:48:31 218

原创 Python脚本中调用Django ORM

Python脚本中调用Django ORMimport osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BMS.settings") import django django.setup() from app.models import Book #引入也要写在上面三句之后 books = Book.objects.all() print(bo

2020-10-30 11:39:20 351

原创 Django查询优化级联查询多条件查询

Django查询优化级联查询多条件查询一:构造Q查询from django.db.models import Qquery_params = Q(is_zs=True)if create_peoples: query_params &= Q(aa__in=create_peoples)if master_title: query_params &= Q(bb__contains=master_title)lit = AA.objects.exclude(is_o

2020-10-30 11:26:47 437

原创 scrapy + selenium模拟 爬取京东商品信息

spiders代码import scrapyfrom scrapy import Requestimport refrom JingDong.items import JingdongItemclass ExampleSpider(scrapy.Spider): '''京东网python书籍信息''' name = 'jingdong' def start...

2018-10-29 22:32:30 1125

原创 scrapy selenium爬取csdn博客信息并进行数据清洗存储到mysql

直接上代码spiders代码:import scrapyimport lxml.htmlfrom scrapy import Requestimport refrom CsDn.items import CsdnItemnumber = 1class ExampleSpider(scrapy.Spider): name = 'csdn' def start_r...

2018-10-29 22:12:10 613

原创 爬虫爬取糗事百科

直接上代码spidersclass ExampleSpider(Spider): name = 'qiushi' def __init__(self): self.lit = [] def start_requests(self): url_str = "https://www.qiushibaike.com/text/p...

2018-10-23 21:32:37 155 1

原创 scrapy selenium爬取淘宝商品信息并存储到数据库

主要内容,官网首页selenium模拟发送搜索关键字,搜索页获取商品链接并进行翻页爬取,其中商品详情页有不同类型的页面,进行不同的抓取方法,处理抓取数据并进行保存。scrapy.spiders代码如下:import scrapyfrom scrapy import Requestfrom TaoBao.items import TaobaoItemimport reclas...

2018-10-23 21:13:11 1323 1

原创 scrapy爬取前程无忧51job网职位信息并存储到数据库

spiders中代码如下import scrapyfrom scrapy import Requestfrom QianCheng.items import QianchengItemimport reclass ExampleSpider(scrapy.Spider): name = '51job' def start_requests(self): ...

2018-10-23 20:42:06 1701

原创 爬虫爬取csdn登陆页面持续加载,selenium模拟无法进行的解决方案

1.近日在爬取csdn时发现csdn突然需要登陆了,登陆没关系,用selenium模拟填写个登陆表单也就行了,但实际操作中发现,模拟进行到登陆页面时页面持续加载,后续步骤无法进行,自然无法登陆和爬取,如下图:只要在一定时间后终止浏览器继续加载就行,尝试了下面的解决方案可以解决这个问题 1.browser.set_page_load_timeout(10) 2.try: 3.browse...

2018-10-23 20:11:19 1021

原创 MySQL和pymysql安装 linux ubuntu

MySQL安装 简单3步 1. sudo apt-get install mysql-server 2. sudo apt-get install mysql-client 3. sudo apt-get install libmysqlclient-dev检查是否安装成功sudo netstat -ntlp | grep mysql pymysql 安装,更简单,只要一步:...

2018-10-19 14:17:37 549

原创 chrome 谷歌浏览器安装 Linux ubuntu

简单3步 1. wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 2. sudo dpkg -i --force-depends google-chrome-stable_current_amd64.deb 3. sudo apt-get install -f

2018-10-19 13:49:11 389

原创 nodejs 10.6安装 linux ubuntu

推荐使用nvm,安装和版本管理非常方便安装,非常简单curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bashnvm install node管理版本node --versionnvm use 8.11.3设置默认版本nvm alias default 8....

2018-10-19 13:44:16 584

原创 Linux ubuntu下Redis安装与使用

安装wget -c http://download.redis.io/releases/redis-3.2.9.tar.gztar -zxvf redis-3.2.9.tar.gzmv redis-3.2.9 /usr/local/redis #移动文件cd /usr/local/redismakemake testmake install启动cd /usr/...

2018-10-19 13:35:37 726

原创 django中LoginRequiredMixin,logout的使用

LoginRequiredMixin提供登录状态验证,没有登录跳转登录链接,如果登陆了则进行后续操作from django.contrib.auth.mixins import LoginRequiredMixinfrom django.contrib.auth.views import logoutfrom django.http import HttpResponse, JsonRe...

2018-10-18 11:35:54 2627

原创 django中类视图ListView的使用

ListView 用于获取数据表中的所有数据,返回一个列表。from django.views.generic import ListViewfrom course.models import Courseclass CourseListView(ListView): """通用视图""" model = Course #指定类 context_objec...

2018-10-18 11:18:20 7430

原创 数据库中null 与 blank=True的区别

blank只是在填写表单的时候可以为空,而在数据库上存储的是一个空字符串;null是在数据库上表现NULL,而不是一个空字符串;需要注意的是,日期型(DateField、TimeField、DateTimeField)和数字型(IntegerField、DecimalField、FloatField)不能接受空字符串,如要想要在填写表单的时候这两种类型的字段为空的话,则需要同时设置null=T...

2018-10-18 10:24:39 3054

原创 linux ubuntu 安装python3.6

sudo apt install build-essential checkinstallsudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-devwget https://www.python.org/ftp/...

2018-10-18 09:20:47 1081

原创 使用nginx,gunicorn快速部署flask到阿里云服务器

阿里云esc中安装python3,以下是安装python3.6的详细步骤sudo apt install build-essential checkinstallsudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libb...

2018-10-18 09:15:29 615

原创 mysql主从配置详细教程最新

MySQL主从可以实现MySQL的读写分离,简言之,master上进行写操作,同步数据库,slave上进行读操作,可以极大的提升性能,降低服务器负载,在此不做赘述,下面以两台机器来做主从配置详解!两个主机主 | 10.8.152.117 | master |从 | 10.8.13.42 | slave |准备工作两台服务器 启动成功关闭防火墙相互ping 通...

2018-09-27 20:49:25 11159 3

原创 Javascript绑定click事件的四种方式总结

一:HTML中添加onclick <button id="vv" onclick="myfunction()" >哈哈</button>二:JS中定义函数绑定事件!var funcc = function () { alert('我爱编程') }var aa = document.getElemen...

2018-09-22 12:34:48 13097 2

原创 confirm 与prompt的区别

confirm 弹窗 点击确定或取消prompt弹窗带输入框,可判断输入数据实例:confirm document.getElementById('put').onblur=function(){ //如果输入的aa弹出对话框 if(document.getElementById('put').value=='aa'){ var a = confirm(...

2018-09-22 12:18:49 1289 1

原创 python深浅拷贝deepcopy的简单理解

以下是个人对Python深浅拷贝的通俗解释,易于绕开复杂的Python数据结构存储来进行理解!高级语言中变量是对内存及其地址的抽象,Python的一切变量都是对象。变量的存储采用了引用语义的方式,存储的只是一个变量的值所对应的地址信息。变量的每一次初始化(赋值),即将新的内容的地址赋给变量。复杂数据结构存储的是各个元素的值得存储位置。进行增删改等操作时不改变数据本身的id,改变的各个元...

2018-09-22 11:45:50 971 1

原创 MySQL操作指令与内置函数总结

MySQL常用操作指令和内置函数,欢迎留言补充!建库,选择库create database class1824; use python1804;删库drop database class1824;3.建表,删表create table user(userid int(11),username varchar(32),password char(32)); drop t...

2018-09-22 11:07:30 863 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除