基于深度学习的虚假评论检测系统

资源下载地址:https://download.csdn.net/download/sheziqiong/88521043
资源下载地址:https://download.csdn.net/download/sheziqiong/88521043

毕设记录

环境版本
pycharm2020.3
python3.7(开发)/3.9.2(运行测试)
django3.2.9
mysql8.0.27
Navicat12.0.11
jquery.min.js2.1.4

jquery引用链接(百度)https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js

22.01.04

  1. JDcomment.py编写测试
class JDc:
    # 首页评论爬取
    def spider_one(self, pro_url):pass
    # 全部评论爬取
    def spider_all(self, pro_url):pass
  1. 建立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),
]
  1. django启动startdjango.bat
cd C:\Users\dell\桌面\虚假评论检测\FCDdjango
python manage.py runserver 0.0.0.0:8000
pause

22.01.05

  1. 建立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   # 创建表结构
  1. 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
  1. 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')
  1. 修改JDcomment.py 返回评论信息的字典列表
  • 启动测试完成,明天开始搞爬虫后端

22.01.06

  1. 爬虫后端完成,测试数据库成功
  • FCDdjango/FCDModel/views.py
  1. 修改FCDdjango/FCDdjango/settings.py
USE_TZ = False
  1. 修改数据库表结构img字段
    扩大容量到2000(暂定)
img = models.CharField(max_length=2000, null=True)
  • 更新数据库结构
python manage.py makemigrations FCDModel  # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate FCDModel   # 创建表结构
  1. 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

  1. 添加wait页面实时显示爬取的数据(暂时手动刷新)
  1. 添加is_repeat字段,检测商品内重复评论
  • 直观显示一致的评论,提高判断效率(暂测正常)

22.01.09

  1. 修改FCDdjango/FCDModel/JDcomment.py的bug
    优化返回
def spider_all(self, pro_url):
    ...
    print(self.rt)
    self.out = self.rt
    self.rt = []
    return self.out
  1. 添加fcdmodel_pro表直观展示爬取过的商品
  2. 删除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
[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)
  • 测试完成
/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测试完成
  • 注意事项
# 增加一个维度,和数据集训练方式一样,是数据列表,不然会报错
content = (np.expand_dims(data_list, 0))

22.01.24

  1. 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

  1. train.py函数重构完成
  2. 评论检测后端FCDdjango/FCDModel/views.py完成,前端FCDdjango/templates/content.html测试完成

2022.02.10

  1. 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

  1. 前端页面编写,拆解功能
  2. 测试

前端完成,测试完成

2022.02.24

加入登录注册功能

  1. 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   # 创建表结构
  1. 注册登录前后端基础搭建完成
  • 测试成功
  1. 解决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
  1. hello.html主页面加入登录状态显示

2022.02.27

  1. 后端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用户操作')
  1. 优化前端对root的指示,添加相关tips

等待注册后端限制和登录注册的前端页面设计编写

2022.03.01

  1. 评论检测进度条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

  1. 注册登录前端css完成,测试完成

注册功能等待配置后端检验,完成后配置前端js校验

2022.03.06

  1. 前后端注册校验完成,测试完成
  2. 登录root显示修改bug
  • cookie的root值加入后取出应该为字符串样式
  • 修改FCDdjango/static/js/tab.js
var root = getCookie("root");
var r = "(非root)"
if(root == 'true'){
    r = "(root)"
}
  1. 可以给登录加一个校验(虽然没啥必要),密码输入暂未隐藏
  2. cloc代码统计工具,统计命令 cloc.exe .
  • https://github.com/AlDanial/cloc/releases

毕设代码初步完成,有修改通知或思路再说吧

2022.03.14

  1. 测试CNN模型的批量检测
  2. 后端加入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

  1. 修改FCDdjango/static/css/page.css和FCDdjango/static/css/show.css
  • 修改按钮颜色,页面透明度,添加滚动条样式等
  • 测试完成

2022.04.07

  1. 添加文件上传,批量识别功能
  • 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>
  1. 基础测试完成
  • 等待前端优化,后端登录限制等
  1. 虚拟环境创建(未开始)
  • 创建
  • 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
cd C:\Users\dell\桌面\虚假评论检测
call .\fcdvenv\Scripts\activate.bat
cd C:\Users\dell\桌面\虚假评论检测\FCDdjango
python manage.py runserver 0.0.0.0:8000
pause
  1. 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绑定事件的方法
<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标签实现下载

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';
  1. 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
  1. pip安装依赖库
pip install -r requirements.txt
  1. 创建数据库
create database FCDsql default charset=utf8;
  1. 创建表结构
python manage.py migrate
  1. 启动django服务
python manage.py runserver 0.0.0.0:80

2022.04.11

  1. 添加日志中间件,实现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',  # 自定义日志中间件
]
  1. 前端注册登录密码type改为password,修改光标初始位置 style=“padding-left:10px;”
  2. 取消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
  1. 修改主页面按钮颜色及js

2022.04.12

  1. 中间加入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

  1. django的路径 ‘./’ 是在manage.py所在文件夹,如中间件这个log路径,log.txt文件存在C:\Users\dell\桌面\虚假评论检测\FCDdjango目录下而不是和中间件同一个目录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    资源下载地址:https://download.csdn.net/download/sheziqiong/88521043
    资源下载地址:https://download.csdn.net/download/sheziqiong/88521043
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shejizuopin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值