资源下载地址:https://download.csdn.net/download/sheziqiong/88521043
资源下载地址:https://download.csdn.net/download/sheziqiong/88521043
毕设记录
环境 | 版本 |
---|---|
pycharm | 2020.3 |
python | 3.7(开发)/3.9.2(运行测试) |
django | 3.2.9 |
mysql | 8.0.27 |
Navicat | 12.0.11 |
jquery.min.js | 2.1.4 |
jquery引用链接(百度)https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js
22.01.04
- JDcomment.py编写测试
class JDc:
# 首页评论爬取
def spider_one(self, pro_url):pass
# 全部评论爬取
def spider_all(self, pro_url):pass
- 建立FCDdjango项目
创建项目
django-admin startproject FCDdjango
重构
python manage.py migrate
建立视图文件FCDdjango/FCDdjango/views.py
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello FCD!")
修改url文件FCDdjango/FCDdjango/urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from . import views
urlpatterns = [
# path('admin/', admin.site.urls),
url(r'hello/', views.hello),
]
- django启动startdjango.bat
cd C:\Users\dell\桌面\虚假评论检测\FCDdjango
python manage.py runserver 0.0.0.0:8000
pause
22.01.05
- 建立django模型
- 创建数据库fcdsql
create database FCDsql default charset=utf8;
- 配置FCDdjango/FCDdjango/settings.py文件
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'fcdsql', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}
- 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()
- Django规定,如果要使用模型,必须要创建一个app。我们使用以下命令创建一个FCDModel的app
django-admin.py startapp FCDModel
- 修改 FCDModel/models.py 文件
from django.db import models
class PL(models.Model):
id_num = models.IntegerField(primary_key=True)
pro_id = models.CharField(max_length=20)
user_id = models.CharField(max_length=20)
date = models.DateTimeField(auto_now=False, auto_now_add=False)
content = models.CharField(max_length=500)
img = models.CharField(max_length=500, null=True)
is_false = models.BooleanField(max_length=10, null=True)
- 接下来在 settings.py 中找到INSTALLED_APPS这一项
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'FCDModel', # 添加此项
]
- 在命令行中运行:
python manage.py migrate # 创建表结构
python manage.py makemigrations FCDModel # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate FCDModel # 创建表结构
- mysql.bat
::管理员运行
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
::main
mysql -u root -p123456
pause
- url配置
- app同级目录创建templates文件夹
- FCDdjango/templates/hello.html(暂用)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FCD虚假评论检测</title>
</head>
<body>
<h1>Hello FCD!</h1>
<form style="display: inline" action="/spider/">
<button>爬虫</button>
</form>
</body>
</html>
- FCDdjango/templates/spider.html(暂用)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>京东评论爬虫</title>
</head>
<body>
<form action="/spider/" method="get">
<input type="text" placeholder="请输入京东商品链接" name="jd_url">
<input type="submit" value="提交">
</form>
</body>
</html>
- 将templates加入到setting配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 修改位置
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
- FCDdjango/FCDdjango/urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from . import views
urlpatterns = [
# path('admin/', admin.site.urls),
url(r'^$', views.hello),
url(r'spider/', views.spider),
url(r'app/', include('FCDModel.urls'))
]
- FCDdjango/FCDdjango/views.py
from django.http import HttpResponse
from django.shortcuts import render
def hello(request):
return render(request, r'hello.html')
def spider(request):
return render(request, r'spider.html')
- FCDdjango/FCDModel/urls.py
from django.conf.urls import url
from .views import *
urlpatterns = [
url('spider/', spider, ),
]
- FCDdjango/FCDModel/views.py
from django.shortcuts import render
def spider(request):
return render(request, r'spider.html')
- 修改JDcomment.py 返回评论信息的字典列表
- 启动测试完成,明天开始搞爬虫后端
22.01.06
- 爬虫后端完成,测试数据库成功
- FCDdjango/FCDModel/views.py
- 修改FCDdjango/FCDdjango/settings.py
USE_TZ = False
- 修改数据库表结构img字段
扩大容量到2000(暂定)
img = models.CharField(max_length=2000, null=True)
- 更新数据库结构
python manage.py makemigrations FCDModel # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate FCDModel # 创建表结构
- Navicat连接mysql
- 出现报错需要更改root用户加密规则
use mysql;
select user.plugin from user where user='root';
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
select user.plugin from user where user='root';
22.01.07
- 添加wait页面实时显示爬取的数据(暂时手动刷新)
- 添加is_repeat字段,检测商品内重复评论
- 直观显示一致的评论,提高判断效率(暂测正常)
22.01.09
- 修改FCDdjango/FCDModel/JDcomment.py的bug
优化返回
def spider_all(self, pro_url):
...
print(self.rt)
self.out = self.rt
self.rt = []
return self.out
- 添加fcdmodel_pro表直观展示爬取过的商品
- 删除fcdmodel_pl的is_repeat字段(大部分商品用不到)
22.01.10
- 添加随机评论展示页面FCDdjango/templates/pro.html
- 添加 随机查询评论 和 虚假提交处理 后端FCDdjango/FCDModel/views.py
- post提交 虚假or真实 测试成功
- pro库添加up_num字段,展示标注次数
22.01.11 ~ 22.01.14
- 数据标注
- 系统测试优化
22.01.16
- D:\mysql-8.0.27-winx64目录创建my.ini
[mysqld]
secure_file_priv=''
csv可以导出了,但是效果不是太好
2. 数据标注收尾
3. sqltocsv.py导出data.csv成功
22.01.17
- wordmod.py
- word2vec模型训练测试完成,导出word2vec.model
22.01.18
- toh5.py
- 中文转换向量,构建训练集train.h5和测试集test.h5
- 矩阵data_list = np.zeros((200, 100))(分词最大长度200,向量size100)
- 测试完成
/train_content
(1698, 200, 100)
/train_label
(1698,)
/test_content
(412, 200, 100)
/test_label
(412,)
22.01.19
- 全连接训练完成,导出model.h5,modtest.py测试完成
- cnn完成,导出model_cnn.h5,modtest.py测试完成
- 注意事项
# 增加一个维度,和数据集训练方式一样,是数据列表,不然会报错
content = (np.expand_dims(data_list, 0))
22.01.24
- LSTM训练完成,导出model_lstm.h5,lstmtest.py测试完成
- 注意事项
# 和数据集训练方式一样,是数据列表,且需要np.array(l)转格式,不然会报错
content = np.array(l)
年前任务结束
22.02.04 ~ 22.02.05
- model_lstm.h5为单输出模型,测试通过但不符合二分类标准
model = models.Sequential()
model.add(layers.LSTM(50, input_shape=(200, 100)))
model.add(layers.Dense(1))
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
x_train, y_train = get_train()
x_test, y_test = get_test()
model.fit(x_train, y_train, epochs=50, batch_size=1, verbose=2)
- model_lstm1.h5为双输出模型,测试通过
model = models.Sequential()
model.add(layers.LSTM(50, input_shape=(200, 100)))
model.add(layers.Dense(2, activation='softmax'))
# compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(train_x, train_y, epochs=50, batch_size=1, verbose=2)
- LSTM算法梯度非线性,建议扩大迭代次数保证模型正常,防止测试输出相同等非正常现象
纪念下卡了我两天的破LSTM模型,555~
2022.02.08
- train.py函数重构完成
- 评论检测后端FCDdjango/FCDModel/views.py完成,前端FCDdjango/templates/content.html测试完成
2022.02.10
- FCDdjango/FCDdjango/settings.py配置静态路径
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static/'),
)
- pro.html测试完成
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>随机评论</title>
<link rel="stylesheet" href="{% static 'css/test.css' %}">
</head>
2022.02.14 ~ 2022.02.23
- 前端页面编写,拆解功能
- 测试
前端完成,测试完成
2022.02.24
加入登录注册功能
- FCDdjango/FCDModel/models.py添加代码
class User(models.Model):
id_num = models.IntegerField(primary_key=True)
nickname = models.CharField(max_length=8, null=False)
username = models.CharField(max_length=16, null=False)
password = models.CharField(max_length=16, null=False)
root = models.BooleanField(max_length=10, null=True)
cmd命令建表
python manage.py makemigrations FCDModel # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate FCDModel # 创建表结构
- 注册登录前后端基础搭建完成
- 测试成功
- 解决Django+jQuery发送post请求时的CSRF验证
- https://blog.csdn.net/weixin_44476410/article/details/123085805
等待部署后端限制和cookie设置等操作
2022.02.25
- cookie设置获取删除功能完成,测试完成
- https://blog.csdn.net/weixin_44476410/article/details/123137876
- hello.html主页面加入登录状态显示
2022.02.27
- 后端cookie鉴权完成,测试完成
def spider_result(request):
# root鉴权
if ('username' in request.COOKIES
and 'password' in request.COOKIES
and request.COOKIES["username"]
and request.COOKIES["password"]):
print("评论爬虫后端root鉴权\n用户名:" + request.COOKIES["username"] + "\n密码(md5):" + request.COOKIES["password"])
user = User.objects.filter(username=request.COOKIES["username"]).first()
if not user:
print('用户名验证失败,请重新登录')
return HttpResponse('用户名验证失败,请重新登录')
if not md5(user.password.encode("utf-8")).hexdigest() == request.COOKIES["password"]:
print('密码验证失败,请重新登录')
return HttpResponse('密码验证失败,请重新登录')
# 非root鉴权注释掉这个if就行
if not user.root == 1:
print('非root用户,仅限root用户操作')
return HttpResponse('非root用户,仅限root用户操作')
print('评论爬虫后端root鉴权成功')
else:
return HttpResponse('未登录,仅限root用户操作')
- 优化前端对root的指示,添加相关tips
等待注册后端限制和登录注册的前端页面设计编写
2022.03.01
- 评论检测进度条FCDdjango/static/js/content.js加入动效,测试完成
// 进度条
if(num == '??'){
num = 0
} else {
num = parseInt(num.replace('%',''))
}
// 动效
var interval = setInterval(function(){
if(num < parseInt(data.num)){
num += 1;
$(".red").css("width",num+"%");
$(".num").text(num+"%");
} else if(num > parseInt(data.num)) {
num -= 1;
$(".red").css("width",num+"%");
$(".num").text(num+"%");
} else {
// 结束定时任务
clearInterval(interval);
}
},15)
2022.03.03 ~ 2022.03.04
- 注册登录前端css完成,测试完成
注册功能等待配置后端检验,完成后配置前端js校验
2022.03.06
- 前后端注册校验完成,测试完成
- 登录root显示修改bug
- cookie的root值加入后取出应该为字符串样式
- 修改FCDdjango/static/js/tab.js
var root = getCookie("root");
var r = "(非root)"
if(root == 'true'){
r = "(root)"
}
- 可以给登录加一个校验(虽然没啥必要),密码输入暂未隐藏
- cloc代码统计工具,统计命令 cloc.exe .
- https://github.com/AlDanial/cloc/releases
毕设代码初步完成,有修改通知或思路再说吧
2022.03.14
- 测试CNN模型的批量检测
- 后端加入CNN模型检测的代码(已注释,备用)
- cnn模型使用时需要先用Softmax()激活
model_cnn = tf.keras.models.load_model(r'../DLMod/model_cnn.h5')
model = tf.keras.Sequential([model_cnn, tf.keras.layers.Softmax()])
- 测试完成
2022.03.21
- 修改FCDdjango/static/css/page.css和FCDdjango/static/css/show.css
- 修改按钮颜色,页面透明度,添加滚动条样式等
- 测试完成
2022.04.07
- 添加文件上传,批量识别功能
- FCDdjango/FCDModel/views.py
# 文件上传 批量识别
@xframe_options_exempt
def upload(request):
# 文件处理
obj = request.FILES.get('file', '1')
dates = []
for chunk in obj.chunks():
date = chunk.decode("gbk")
date = date.split('\r\n')
for d in date:
# 扩展列表等待数据
dl = d.split(',')
ap = [''] * (3 - len(dl))
dl.extend(ap)
dates.append(dl)
dates = dates[1:-1]
print(dates)
- FCDdjango/templates/file.html
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>upload</title>
</head>
<body>
<a href="{% static 'files/上传模板.csv' %}" download="模板.csv">下载模板</a>
<form action="/app/upload/" method="POST" enctype=multipart/form-data>
{% csrf_token %}
<input type='file' name="file">
<button>upload</button>
</form>
</body>
</html>
- 基础测试完成
- 等待前端优化,后端登录限制等
- 虚拟环境创建(未开始)
- 创建
- python -m venv myvenv
- 激活
- myvenv/Scripts/activate.bat
- pip 导出安装包
- pip freeze > requirements.txt
- pip 在线安装
- pip install -r requirement.txt
2022.04.08
- 虚拟环境创建完成,启动完成 startvenv.bat
cd C:\Users\dell\桌面\虚假评论检测
call .\fcdvenv\Scripts\activate.bat
cd C:\Users\dell\桌面\虚假评论检测\FCDdjango
python manage.py runserver 0.0.0.0:8000
pause
- pip导出完成requirements.txt
absl-py==0.15.0
asgiref==3.5.0
astunparse==1.6.3
cachetools==5.0.0
certifi==2021.10.8
chardet==4.0.0
Cython==0.29.23
Django==3.2.9
flatbuffers==1.12
gast==0.4.0
gensim==4.1.2
google-auth==2.6.3
google-auth-oauthlib==0.4.6
google-pasta==0.2.0
grpcio==1.34.1
h5py==3.1.0
idna==2.10
importlib-metadata==4.11.3
jieba==0.42.1
keras-nightly==2.5.0.dev2021032900
Keras-Preprocessing==1.1.2
Markdown==3.3.6
numpy==1.19.5
oauthlib==3.2.0
opt-einsum==3.3.0
protobuf==3.20.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
PyMySQL==1.0.2
pytz==2022.1
requests==2.25.1
requests-oauthlib==1.3.1
rsa==4.8
scipy==1.8.0
six==1.15.0
smart-open==5.2.1
sqlparse==0.4.2
tensorboard==2.8.0
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorflow==2.5.0
termcolor==1.1.0
tf-estimator-nightly==2.5.0.dev2021032501
typing-extensions==3.7.4.3
urllib3==1.26.9
Werkzeug==2.1.1
wrapt==1.12.1
zipp==3.8.0
2022.04.09
- 文件上传前后端完成,优化完成,测试完成
问题注意
- 优化了上传文件的格式,采js绑定事件的方法
<div class="up">
{% csrf_token %}
<input class="file" name="file" value="点击选择本地文件" readonly onclick="javascript:$('input[name=\'fileName\']').click();"/>
<input type="file" id="fileName" name="fileName" style="display: none;" onchange="javascript:$('input[name=\'file\']').val(value.split('\\')[value.split('\\').length-1]);">
<button id="upload" class="upload">上传</button>
</div>
- 文件上传采用ajax请求,不知道post怎么加文件
$("#upload").click(function(){
alert('上传成功,请耐心等待文件处理')
$("#result").text('文件处理中...');
var formData = new FormData();
var files = $('#fileName')[0].files;
formData.append('file', files[0]);
// 获取csrf,提交时加入data
var csrfToken = $("[name='csrfmiddlewaretoken']").val();
formData.append("csrfmiddlewaretoken",csrfToken);
$.ajax({
method: 'POST',
url: '/app/upload/',
data: formData,
// 不修改 Content-Type 属性,使用 FormData 默认的 Content-Type 值
contentType: false,
// 不对 FormData 中的数据进行 url 编码,而是将 FormData 数据原样发送到服务器
processData: false,
success: function(data) {
$("#result").text(data.text);
$("#download").text('下载本次识别结果');
}
})
});
- 文件下载(优化前)
if(id && id !=''){
// 不能直接修改a标签的href
window.open("/static/files/"+id+".csv","_self");
}else{
alert("请先登录!!")
}
文件放在static文件夹中,无法鉴权,其他人也能通过链接下载
- 文件下载(优化后)
var csrfToken = $("[name='csrfmiddlewaretoken']").val();
$.post("/app/download/",{"csrfmiddlewaretoken":csrfToken},function(data,status){
if(data.text){
$("#result").html(data.text);
} else {
var id = getCookie('id');
var datetime = new Date();
var hour = datetime.getHours()< 10 ? "0" + datetime.getHours() : datetime.getHours();
var minute = datetime.getMinutes()< 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
var second = datetime.getSeconds()< 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
blob = new Blob(['\ufeff' + data], {type: 'text/csv;charset=UTF-8'});
//对于Blob对象,我们可以创建出一个URL来访问它。使用URL对象的createObjectURL方法。
var a = document.createElement('a');
a.hidden = true;
a.download = id + '-识别结果-'+ hour + minute + second + '.csv';
a.href=window.URL.createObjectURL(blob);
a.click()
}
});
采用post请求构建文件流访问,django后端使用FileResponse返回文件流,通过blob和a标签实现下载
- csv在blob后乱码问题记录
参考 https://my.oschina.net/dawd/blog/801323
用wps打开csv文件,由于编码格式会导致csv乱码
需要加\ufeff
blob = new Blob(['\ufeff' + data], {type: 'text/csv;charset=UTF-8'});
需要csv编码格式为utf-8-bom才能保证文件传输和blob后正常解析,所以修改了模板的编码格式
2. 请求鉴权优化,不需要手动上传cookie的删除username等参数了
3. 文件上传鉴权添加完成
2022.04.10
部署测试完成
- gitee下载文件
- 下载python,版本3.9.2 https://www.python.org/downloads/release/python-392/
- 下载mysql社区版,版本8.0.27 https://dev.mysql.com/downloads/installer/
- mysql路径C:\Program Files\MySQL\MySQL Server 8.0\bin加path
- mysql修改密码加密格式,适配Navicat
use mysql;
select user.plugin from user where user='root';
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
select user.plugin from user where user='root';
- pip换源C:\Users\Administrator\pip创建pip.ini
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
- pip安装依赖库
pip install -r requirements.txt
- 创建数据库
create database FCDsql default charset=utf8;
- 创建表结构
python manage.py migrate
- 启动django服务
python manage.py runserver 0.0.0.0:80
2022.04.11
- 添加日志中间件,实现ip等信息获取保存
- FCDdjango/FCDdjango/middleware.py
import time
from django.utils.deprecation import MiddlewareMixin
class AccessMiddleware(MiddlewareMixin):
def process_request(self, request):
meta = request.META
print('\n[%s]' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), end=' ')
if 'id' in request.COOKIES and 'username' in request.COOKIES and 'password' in request.COOKIES:
print('id=' + request.COOKIES['id'] + ' username=' + request.COOKIES['username'] + ' password=' + request.COOKIES['password'])
print("PATH_INFO=%s, REMOTE_ADDR=%s, HTTP_USER_AGENT=%s" % (meta['PATH_INFO'], meta['REMOTE_ADDR'], meta['HTTP_USER_AGENT']))
with open('./log.txt', 'a', encoding='utf-8') as fp:
fp.write('[%s] ' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
if 'id' in request.COOKIES and 'username' in request.COOKIES and 'password' in request.COOKIES:
fp.write('id=' + request.COOKIES['id'] + ' username=' + request.COOKIES['username'] + ' password=' + request.COOKIES['password'] + '\n')
fp.write("PATH_INFO=%s, REMOTE_ADDR=%s, HTTP_USER_AGENT=%s\n\n" % (meta['PATH_INFO'], meta['REMOTE_ADDR'], meta['HTTP_USER_AGENT']))
return None
def process_response(self, request, response):
return response
- FCDdjango/FCDdjango/settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'FCDdjango.middleware.AccessMiddleware', # 自定义日志中间件
]
- 前端注册登录密码type改为password,修改光标初始位置 style=“padding-left:10px;”
- 取消debug,正常404
- FCDdjango/FCDdjango/settings.py
DEBUG = False
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
# os.path.join(BASE_DIR, 'static/'),
os.path.join(BASE_DIR, '/static/'), # debug
)
STATIC_ROOT = 'static' # debug
- 修改主页面按钮颜色及js
2022.04.12
- 中间加入IP地理地址库geoip2,目前仅作为服务器端测试功能
import time
from django.utils.deprecation import MiddlewareMixin
# import geoip2.database
#
# reader = geoip2.database.Reader('./GeoLite2-City.mmdb')
class AccessMiddleware(MiddlewareMixin):
def process_request(self, request):
meta = request.META
print('\n[%s]' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), end=' ')
if 'id' in request.COOKIES and 'username' in request.COOKIES and 'password' in request.COOKIES:
print('id=' + request.COOKIES['id'] + ' username=' + request.COOKIES['username'] + ' password=' +
request.COOKIES['password'])
# 通过geoip2的ip库获取ip地理地址,暂为服务器端测试功能
address = ''
# '''
# try:
# response = reader.city(meta['REMOTE_ADDR'])
# try:
# address += response.country.names["zh-CN"] + ' '
# except:
# try:
# address += response.country.name + ' '
# except:
# pass
# try:
# address += response.subdivisions.most_specific.names["zh-CN"] + ' '
# except:
# try:
# address += response.subdivisions.most_specific.name + ' '
# except:
# pass
# try:
# address += response.city.names["zh-CN"] + ' '
# except:
# try:
# address += response.city.name + ' '
# except:
# pass
# except:
# address = '未能成功解析地理地址'
# print("PATH_INFO=%s, REMOTE_ADDR=%s, ADDRESS=%s, HTTP_USER_AGENT=%s" % (
# meta['PATH_INFO'], meta['REMOTE_ADDR'], address, meta['HTTP_USER_AGENT']))
# '''
print("PATH_INFO=%s, REMOTE_ADDR=%s, HTTP_USER_AGENT=%s" % (
meta['PATH_INFO'], meta['REMOTE_ADDR'], meta['HTTP_USER_AGENT']))
with open('./log.txt', 'a', encoding='utf-8') as fp:
fp.write('[%s] ' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
if 'id' in request.COOKIES and 'username' in request.COOKIES and 'password' in request.COOKIES:
fp.write('id=' + request.COOKIES['id'] + ' username=' + request.COOKIES['username'] + ' password=' +
request.COOKIES['password'] + '\n')
# 测试功能 同上
# fp.write("PATH_INFO=%s, REMOTE_ADDR=%s, ADDRESS=%s, HTTP_USER_AGENT=%s\n\n" % (
# meta['PATH_INFO'], meta['REMOTE_ADDR'], address, meta['HTTP_USER_AGENT']))
fp.write("PATH_INFO=%s, REMOTE_ADDR=%s, HTTP_USER_AGENT=%s\n\n" % (
meta['PATH_INFO'], meta['REMOTE_ADDR'], meta['HTTP_USER_AGENT']))
return None
def process_response(self, request, response):
return response