# FCDproject **Repository Path**: z2322739526/fcdproject ## Basic Information - **Project Name**: FCDproject - **Description**: 基于深度学习的虚假评论检测系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2022-03-03 - **Last Updated**: 2025-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: 虚假评论检测, 深度学习, Django, 毕业设计 ## README # 毕设记录 |环境|版本| |----|----| |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 1. JDcomment.py编写测试 ```python class JDc: # 首页评论爬取 def spider_one(self, pro_url):pass # 全部评论爬取 def spider_all(self, pro_url):pass ``` 2. 建立FCDdjango项目 ```cmd 创建项目 django-admin startproject FCDdjango 重构 python manage.py migrate ``` 建立视图文件FCDdjango/FCDdjango/views.py ```python from django.http import HttpResponse def hello(request): return HttpResponse("Hello FCD!") ``` 修改url文件FCDdjango/FCDdjango/urls.py ```python 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), ] ``` 3. django启动startdjango.bat ```bat cd C:\Users\dell\桌面\虚假评论检测\FCDdjango python manage.py runserver 0.0.0.0:8000 pause ``` ## 22.01.05 1. 建立django模型 + 创建数据库fcdsql ```cmd create database FCDsql default charset=utf8; ``` + 配置FCDdjango/FCDdjango/settings.py文件 ```python 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 中引入模块和进行配置 ```python import pymysql pymysql.install_as_MySQLdb() ``` + Django规定,如果要使用模型,必须要创建一个app。我们使用以下命令创建一个FCDModel的app ```cmd django-admin.py startapp FCDModel ``` + 修改 FCDModel/models.py 文件 ```python 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这一项 ```python INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'FCDModel', # 添加此项 ] ``` + 在命令行中运行: ```cmd python manage.py migrate # 创建表结构 python manage.py makemigrations FCDModel # 让 Django 知道我们在我们的模型有一些变更 python manage.py migrate FCDModel # 创建表结构 ``` 2. mysql.bat ```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 ``` 3. url配置 + app同级目录创建templates文件夹 + FCDdjango/templates/hello.html(暂用) ```html FCD虚假评论检测

Hello FCD!

``` + FCDdjango/templates/spider.html(暂用) ```html 京东评论爬虫
``` + 将templates加入到setting配置 ```python 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 ```python 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 ```python 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 ```python from django.conf.urls import url from .views import * urlpatterns = [ url('spider/', spider, ), ] ``` + FCDdjango/FCDModel/views.py ```python from django.shortcuts import render def spider(request): return render(request, r'spider.html') ``` 4. 修改JDcomment.py 返回评论信息的字典列表 + 启动测试完成,明天开始搞爬虫后端 ## 22.01.06 1. 爬虫后端完成,测试数据库成功 + FCDdjango/FCDModel/views.py 2. 修改FCDdjango/FCDdjango/settings.py ```python USE_TZ = False ``` 3. 修改数据库表结构img字段 扩大容量到2000(暂定) ```python img = models.CharField(max_length=2000, null=True) ``` + 更新数据库结构 ```cmd python manage.py makemigrations FCDModel # 让 Django 知道我们在我们的模型有一些变更 python manage.py migrate FCDModel # 创建表结构 ``` 4. Navicat连接mysql + 出现报错需要更改root用户加密规则 ```cmd 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 1. 添加wait页面实时显示爬取的数据(暂时手动刷新) + 参考[https://blog.csdn.net/chaoren499/article/details/97135142](https://blog.csdn.net/chaoren499/article/details/97135142) 2. 添加is_repeat字段,检测商品内重复评论 + 直观显示一致的评论,提高判断效率(暂测正常) ## 22.01.09 1. 修改FCDdjango/FCDModel/JDcomment.py的bug 优化返回 ```python def spider_all(self, pro_url): ... print(self.rt) self.out = self.rt self.rt = [] return self.out ``` 2. 添加fcdmodel_pro表直观展示爬取过的商品 3. 删除fcdmodel_pl的is_repeat字段(大部分商品用不到) ## 22.01.10 1. 添加随机评论展示页面FCDdjango/templates/pro.html 2. 添加 随机查询评论 和 虚假提交处理 后端FCDdjango/FCDModel/views.py 3. post提交 虚假or真实 测试成功 4. pro库添加up_num字段,展示标注次数 ## 22.01.11 ~ 22.01.14 1. 数据标注 2. 系统测试优化 ## 22.01.16 1. D:\mysql-8.0.27-winx64目录创建my.ini ```python [mysqld] secure_file_priv='' ``` csv可以导出了,但是效果不是太好 2. 数据标注收尾 3. sqltocsv.py导出data.csv成功 ## 22.01.17 1. wordmod.py + word2vec模型训练测试完成,导出word2vec.model ## 22.01.18 1. toh5.py + 中文转换向量,构建训练集train.h5和测试集test.h5 + 矩阵data_list = np.zeros((200, 100))(分词最大长度200,向量size100) + 测试完成 ```cmd /train_content (1698, 200, 100) /train_label (1698,) /test_content (412, 200, 100) /test_label (412,) ``` ## 22.01.19 1. 全连接训练完成,导出model.h5,modtest.py测试完成 2. cnn完成,导出model_cnn.h5,modtest.py测试完成 + 注意事项 ```python # 增加一个维度,和数据集训练方式一样,是数据列表,不然会报错 content = (np.expand_dims(data_list, 0)) ``` ## 22.01.24 1. LSTM训练完成,导出model_lstm.h5,lstmtest.py测试完成 + 注意事项 ```python # 和数据集训练方式一样,是数据列表,且需要np.array(l)转格式,不然会报错 content = np.array(l) ``` **年前任务结束** ## 22.02.04 ~ 22.02.05 + model_lstm.h5为单输出模型,测试通过但不符合二分类标准 ```python 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为双输出模型,测试通过 ```python 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 1. train.py函数重构完成 2. 评论检测后端FCDdjango/FCDModel/views.py完成,前端FCDdjango/templates/content.html测试完成 ## 2022.02.10 1. FCDdjango/FCDdjango/settings.py配置静态路径 ```python STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static/'), ) ``` + pro.html测试完成 ```html {% load static %} 随机评论 ``` ## 2022.02.14 ~ 2022.02.23 1. 前端页面编写,拆解功能 2. 测试 **前端完成,测试完成** ## 2022.02.24 **加入登录注册功能** 1. FCDdjango/FCDModel/models.py添加代码 ```python 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命令建表 ```cmd python manage.py makemigrations FCDModel # 让 Django 知道我们在我们的模型有一些变更 python manage.py migrate FCDModel # 创建表结构 ``` 2. 注册登录前后端基础搭建完成 + 测试成功 3. 解决Django+jQuery发送post请求时的CSRF验证 + https://blog.csdn.net/weixin_44476410/article/details/123085805 **等待部署后端限制和cookie设置等操作** ## 2022.02.25 1. cookie设置获取删除功能完成,测试完成 + https://blog.csdn.net/weixin_44476410/article/details/123137876 2. hello.html主页面加入登录状态显示 ## 2022.02.27 1. 后端cookie鉴权完成,测试完成 ```python 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用户操作') ``` 2. 优化前端对root的指示,添加相关tips **等待注册后端限制和登录注册的前端页面设计编写** ## 2022.03.01 1. 评论检测进度条FCDdjango/static/js/content.js加入动效,测试完成 ```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 1. 注册登录前端css完成,测试完成 **注册功能等待配置后端检验,完成后配置前端js校验** ## 2022.03.06 1. 前后端注册校验完成,测试完成 2. 登录root显示修改bug + cookie的root值加入后取出应该为字符串样式 + 修改FCDdjango/static/js/tab.js ```js var root = getCookie("root"); var r = "(非root)" if(root == 'true'){ r = "(root)" } ``` 3. 可以给登录加一个校验(虽然没啥必要),密码输入暂未隐藏 4. cloc代码统计工具,统计命令 cloc.exe . + https://github.com/AlDanial/cloc/releases # 毕设代码初步完成,有修改通知或思路再说吧 ## 2022.03.14 1. 测试CNN模型的批量检测 2. 后端加入CNN模型检测的代码(已注释,备用) + cnn模型使用时需要先用Softmax()激活 ```python 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 1. 修改FCDdjango/static/css/page.css和FCDdjango/static/css/show.css + 修改按钮颜色,页面透明度,添加滚动条样式等 + 测试完成 ## 2022.04.07 1. 添加文件上传,批量识别功能 + FCDdjango/FCDModel/views.py ```python # 文件上传 批量识别 @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 ```html {% load static %} upload 下载模板
{% csrf_token %}
``` 2. 基础测试完成 + 等待前端优化,后端登录限制等 3. 虚拟环境创建(未开始) + 创建 + python -m venv myvenv + 激活 + myvenv/Scripts/activate.bat + pip 导出安装包 + pip freeze > requirements.txt + pip 在线安装 + pip install -r requirement.txt ## 2022.04.08 1. 虚拟环境创建完成,启动完成 startvenv.bat ```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 ``` 2. 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 1. 文件上传前后端完成,优化完成,测试完成 问题注意 + 优化了上传文件的格式,采js绑定事件的方法 ```html
{% csrf_token %}
``` + 文件上传采用ajax请求,不知道post怎么加文件 ```javascript $("#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('下载本次识别结果'); } }) }); ``` + 文件下载(优化前) ```javascript if(id && id !=''){ // 不能直接修改a标签的href window.open("/static/files/"+id+".csv","_self"); }else{ alert("请先登录!!") } ``` 文件放在static文件夹中,无法鉴权,其他人也能通过链接下载 + 文件下载(优化后) ```javascript 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](https://my.oschina.net/dawd/blog/801323) 用wps打开csv文件,由于编码格式会导致csv乱码 需要加\ufeff ```javascript blob = new Blob(['\ufeff' + data], {type: 'text/csv;charset=UTF-8'}); ``` 需要csv编码格式为utf-8-bom才能保证文件传输和blob后正常解析,所以修改了模板的编码格式 2. 请求鉴权优化,不需要手动上传cookie的删除username等参数了 3. 文件上传鉴权添加完成 ## 2022.04.10 部署测试完成 1. gitee下载文件 2. 下载python,版本3.9.2 https://www.python.org/downloads/release/python-392/ 3. 下载mysql社区版,版本8.0.27 https://dev.mysql.com/downloads/installer/ 4. mysql路径C:\Program Files\MySQL\MySQL Server 8.0\bin加path 5. 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'; ``` 6. 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 ``` 7. pip安装依赖库 ``` pip install -r requirements.txt ``` 8. 创建数据库 ``` create database FCDsql default charset=utf8; ``` 9. 创建表结构 ``` python manage.py migrate ``` 10. 启动django服务 ``` python manage.py runserver 0.0.0.0:80 ``` ## 2022.04.11 1. 添加日志中间件,实现ip等信息获取保存 + FCDdjango/FCDdjango/middleware.py ```python 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 ```python 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', # 自定义日志中间件 ] ``` 2. 前端注册登录密码type改为password,修改光标初始位置 style="padding-left:10px;" 3. 取消debug,正常404 + FCDdjango/FCDdjango/settings.py ```python 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 ``` 4. 修改主页面按钮颜色及js ## 2022.04.12 1. 中间加入IP地理地址库geoip2,目前仅作为服务器端测试功能 ```python 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 ``` 2. django的路径 './' 是在manage.py所在文件夹,如中间件这个log路径,log.txt文件存在C:\Users\dell\桌面\虚假评论检测\FCDdjango目录下而不是和中间件同一个目录 # 优化告一段落,得赶紧写论文了,555~