0x01 错误原因
python manage.py makemigrations
报错提示: AttributeError: 'str' object has no attribute 'decode'
0x02 解决
直接定位到报错文件
C:\python38\Lib\site-packages\django\db\backends\mysql\operations.py
修改源码:
# 头部导入
from django.utils.encoding import force_text
# 报错的位置更改
q...
0x01 报错
表单提交的时候报错提示
CSRF token missing or incorrect.*
0x02 处理
模板中添加如下防止csrf代码
{% csrf_token %}
Django的安装
注意安装LTS版本
安装
pip install Django==2.2(卸载django:pip uninstall django)
创建第一个Django项目
命令行创建
django-admin startproject 项目名
PyCharm
File -> new Project -> 左侧选第二项,右侧第一项是路径,第二项是选python版本
在...
0x01接收路径
函数式的路径判断
截取请求路径的扩展功能
0x02 代码
"""
使用socket 搭建一个简单的web服务端
函数进阶版
"""
import time
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8080))
sk.listen()
def yingying(url):
data = 'ni fang wen de shi: {}'.format(url)
return bytes(data, encoding='utf8')
...
0x01 需求
功能说明:
监听9090端口
解析html文件
支持http协议
0x02 代码实现
import socket
sk = socket.socket()
sk.bind(("127.0.0.1",9090))
sk.listen()
#sk.accept()
while True:
conn,addr = sk.accept()
data = conn.recv(1024)
print(data)
#http协议输出
...
0x01 server
import select
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
del_l = []
rlist = [sk]# 是用来让select帮忙监听的 所有 接口
# select:windows/linux是监听事件有没有数据到来
# poll: linux 也可以做select的工作
# epoll: linux 也可以做类似的工作
while 1:
r,w,x = select.select(rlist,[]...
0x01 服务端
import socket
sk = socket.socket()
sk.setblocking(False)
sk.bind(('127.0.0.1',8080))
sk.listen()
l = []
del_l = []
while 1:
try:
conn,addr = sk.accept()# 如果是阻塞IO模型,在这里程序会一直等待。
l.append(conn)# 将每个请求连接的客户端的conn添加到列表中
except BlockingIOError:
for...
0x01代码
from bs4 import BeautifulSoup
import requests
import time
import re
from multiprocessing import Process
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/61.0'
}
def get_url(url):
res = requests.get(url)
if res.status_code == 200:
...
0x01 PyCharm安装包的方法
引入图片
0x02 命令行安装
无法在pycharm中指定源 关键命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
测试有效
主要依赖的是 subprocess模块
Server端:
import socket
import subprocess
sk = socket.socket()
sk.bind(("127.0.0.1",10050))
sk.listen()
conn,addr = sk.accept()
while True:
if getattr(conn,'_closed'):
conn, addr = sk.accept()
# 获取接收到的命令
exec_cmd = conn.recv(10...
主要是针对拆包的negal算法和合包的数据获取导致的问题
sever端:
import socket
import json
import struct
sk = socket.socket()
sk.bind(("127.0.0.1",8001))
sk.listen()
conn,addr = sk.accept()
b_len_dic = conn.recv(4)
len_dic = struct.unpack('i',b_len_dic)[0]# 获取到int类型字典的长度,
# unpack得到的是一个元组,要取下标为0的位置
...
0x01 思路
使用tcp协议传输文件
json解析二进制的时候,有问题, 不建议使用,推荐 pickle
0x02 代码
服务器端
# 测试文件服务器
# 实现文件的上传和下载
import socket
import os
import json
import pickle
sk = socket.socket()
sk.bind(("127.0.0.1",10051))
sk.listen()
#等待连接
conn,addr = sk.accept()
while...
可以对比下tcp
服务端:
#udp测试
import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",10050))
# 收发
while 1:
msg_str,addr = sk.recvfrom(1024)
print("客户端:",msg_str.decode("utf-8"),addr)
msg_s = input(">>>")
sk.sendto(msg_s.encode("ut...
服务端:
#聊天室测试
import socket
import time
sk = socket.socket()
sk.bind(('192.168.3.12',30031))
sk.listen()
conn, addr = sk.accept()
#客户端永远开启
while True:
if getattr(conn,'_closed'):
print("走了一个哥们")
conn, addr = sk.accept()
print("新来人了!!")
msg_b...
import re
from urllib.request import urlopen, Request
def getPage(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
ret = Request(url, headers=headers)
res = urlopen(ret)
return...