Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
f2f8aefd71 | |||
eac90241ef | |||
![]() |
0ce7087309 |
|
@ -35,22 +35,20 @@ INSTALLED_APPS = [
|
||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'rest_framework',
|
|
||||||
'rest_framework_swagger',
|
|
||||||
'web',
|
'web',
|
||||||
]
|
]
|
||||||
|
|
||||||
# swagger 配置项
|
# swagger 配置项
|
||||||
# SWAGGER_SETTINGS = {
|
# SWAGGER_SETTINGS = {
|
||||||
# # 基础样式
|
# # 基础样式
|
||||||
# # 'SECURITY_DEFINITIONS': {
|
# 'SECURITY_DEFINITIONS': {
|
||||||
# # "basic": {
|
# "basic": {
|
||||||
# # 'type': 'basic'
|
# 'type': 'basic'
|
||||||
# # }
|
# }
|
||||||
# # },
|
# },
|
||||||
# # 如果需要登录才能够查看接口文档, 登录的链接使用restframework自带的.
|
# # 如果需要登录才能够查看接口文档, 登录的链接使用restframework自带的.
|
||||||
# # 'LOGIN_URL': 'rest_framework:login',
|
# 'LOGIN_URL': 'rest_framework:login',
|
||||||
# # 'LOGOUT_URL': 'rest_framework:logout',
|
# 'LOGOUT_URL': 'rest_framework:logout',
|
||||||
# # 'DOC_EXPANSION': None,
|
# # 'DOC_EXPANSION': None,
|
||||||
# # 'SHOW_REQUEST_HEADERS':True,
|
# # 'SHOW_REQUEST_HEADERS':True,
|
||||||
# # 'USE_SESSION_AUTH': True,
|
# # 'USE_SESSION_AUTH': True,
|
||||||
|
@ -64,11 +62,11 @@ INSTALLED_APPS = [
|
||||||
# 'VALIDATOR_URL': None,
|
# 'VALIDATOR_URL': None,
|
||||||
# }
|
# }
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
# REST_FRAMEWORK = {
|
||||||
'DEFAULT_PERMISSION_CLASSES': [
|
# 'DEFAULT_PERMISSION_CLASSES': [
|
||||||
'rest_framework.permissions.IsAuthenticated',
|
# 'rest_framework.permissions.IsAuthenticated',
|
||||||
]
|
# ]
|
||||||
}
|
# }
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
'django.middleware.security.SecurityMiddleware',
|
'django.middleware.security.SecurityMiddleware',
|
||||||
|
|
|
@ -14,53 +14,13 @@ Including another URLconf
|
||||||
1. Import the include() function: from django.urls import include, path
|
1. Import the include() function: from django.urls import include, path
|
||||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||||
"""
|
"""
|
||||||
from django.db import router
|
|
||||||
from django.urls import path
|
|
||||||
from drf_yasg import openapi
|
|
||||||
from drf_yasg.views import get_schema_view
|
|
||||||
from rest_framework import permissions, routers
|
|
||||||
from django.contrib import admin
|
|
||||||
from rest_framework import routers
|
|
||||||
from django.conf.urls import include
|
|
||||||
from rest_framework.routers import DefaultRouter
|
|
||||||
from rest_framework.schemas.views import SchemaView
|
|
||||||
from tornado.web import url
|
|
||||||
|
|
||||||
from web import views
|
from django.contrib import admin
|
||||||
|
from django.urls import path
|
||||||
from web.controller.html_parser_controller import HtmlParserController
|
from web.controller.html_parser_controller import HtmlParserController
|
||||||
from web.controller.schedule_controller import SchedulerController
|
from web.controller.schedule_controller import SchedulerController
|
||||||
|
|
||||||
# Swagger documentation setup
|
|
||||||
# schema_view = get_schema_view(
|
|
||||||
# openapi.Info(
|
|
||||||
# title="舆情系统API",
|
|
||||||
# default_version='v1',
|
|
||||||
# description="舆情系统API",
|
|
||||||
# terms_of_service="https://www.google.com/policies/terms/",
|
|
||||||
# contact=openapi.Contact(email="contact@snippets.local"),
|
|
||||||
# license=openapi.License(name="BSD License"),
|
|
||||||
# ),
|
|
||||||
# public=True,
|
|
||||||
# permission_classes=(permissions.AllowAny,),
|
|
||||||
# )
|
|
||||||
|
|
||||||
|
|
||||||
# 重要的是如下三行
|
|
||||||
from rest_framework.schemas import get_schema_view
|
|
||||||
from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer
|
|
||||||
|
|
||||||
schema_view = get_schema_view(title='Users API', renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer])
|
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
|
||||||
# router.register('users', views.UserViewSet, base_name='user')
|
|
||||||
# router.register('groups', views.GroupViewSet, base_name='group')
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls),
|
|
||||||
path('', include(router.urls)),
|
|
||||||
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
|
||||||
path('docs/', schema_view, name='docs'),
|
|
||||||
|
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
path('api/v1/htmlParser/parseHtml', HtmlParserController().parse_html),
|
path('api/v1/htmlParser/parseHtml', HtmlParserController().parse_html),
|
||||||
path('api/v1/scheduler/create', SchedulerController().create),
|
path('api/v1/scheduler/create', SchedulerController().create),
|
||||||
|
|
|
@ -8,6 +8,7 @@ from scrapy.utils.project import get_project_settings
|
||||||
|
|
||||||
from web.handler.apscheduler_handler import ApschedulerHandler
|
from web.handler.apscheduler_handler import ApschedulerHandler
|
||||||
from web.handler.html_parser_handler import HtmlParserHandler
|
from web.handler.html_parser_handler import HtmlParserHandler
|
||||||
|
from web.handler.louvain_handler import LouvainHandler
|
||||||
|
|
||||||
sys.path.append(r"collector")
|
sys.path.append(r"collector")
|
||||||
|
|
||||||
|
@ -22,6 +23,7 @@ class BaseController:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.html_parser_handler = HtmlParserHandler()
|
self.html_parser_handler = HtmlParserHandler()
|
||||||
self.apscheduler_handler = ApschedulerHandler()
|
self.apscheduler_handler = ApschedulerHandler()
|
||||||
|
self.louvain_handler = LouvainHandler()
|
||||||
|
|
||||||
def to_vo(self, request, clazz):
|
def to_vo(self, request, clazz):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,16 +1,10 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import json
|
|
||||||
from collections import namedtuple
|
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from rest_framework.decorators import api_view
|
from rest_framework.decorators import api_view
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from twisted.protocols.amp import Box
|
|
||||||
from collector.spiders.collector_spider import CollectorSpider
|
|
||||||
from web.controller.base_controller import BaseController
|
from web.controller.base_controller import BaseController
|
||||||
from web.dto.api_result import ApiResult
|
|
||||||
from web.manager.gridgraph_manager import GridGraphManager
|
|
||||||
from web.manager.log_manager import LogManager
|
from web.manager.log_manager import LogManager
|
||||||
from web.util.dto_util import DtoUtil
|
from web.util.dto_util import DtoUtil
|
||||||
from web.vo.parse_html_vo import ParseHtmlVo
|
from web.vo.parse_html_vo import ParseHtmlVo
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from web.service.training_sensitive_word_service import TrainingSensitiveWordService
|
from web.service.training_sensitive_word_service import TrainingSensitiveWordService
|
||||||
|
from web.service.louvain_service import LouvainService
|
||||||
|
|
||||||
|
|
||||||
class BaseHandler:
|
class BaseHandler:
|
||||||
|
@ -11,3 +12,4 @@ class BaseHandler:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.training_sensitive_word_service = TrainingSensitiveWordService()
|
self.training_sensitive_word_service = TrainingSensitiveWordService()
|
||||||
|
self.louvain_service = LouvainService()
|
||||||
|
|
20
web/handler/louvain_handler.py
Normal file
20
web/handler/louvain_handler.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from web.handler.base_handler import BaseHandler
|
||||||
|
from web.manager.log_manager import LogManager
|
||||||
|
|
||||||
|
Logger = LogManager.get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class LouvainHandler(BaseHandler):
|
||||||
|
"""
|
||||||
|
louvain算法处理类
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
"""
|
||||||
|
测试louvain算法
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.louvain_service.test()
|
|
@ -1,18 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from rest_framework import serializers
|
|
||||||
from web.models.training_sensitive_word import TrainingSensitiveWord
|
|
||||||
|
|
||||||
|
|
||||||
# 序列化模型为其他格式
|
|
||||||
|
|
||||||
class TrainingSensitiveWordSerializer(serializers.ModelSerializer):
|
|
||||||
class Meta:
|
|
||||||
model = TrainingSensitiveWord
|
|
||||||
|
|
||||||
# 序列化所有的字段
|
|
||||||
fields = '__all__'
|
|
||||||
|
|
||||||
# 序列化部分字段
|
|
||||||
# fields = ('id','song','singer','last_modify_date','created')
|
|
38
web/service/louvain_service.py
Normal file
38
web/service/louvain_service.py
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import community as community_louvain
|
||||||
|
import networkx as nx
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from web.manager.log_manager import LogManager
|
||||||
|
from web.service.base_service import BaseService
|
||||||
|
|
||||||
|
Logger = LogManager.get_logger(__name__)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Louvain算法
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class LouvainService(BaseService):
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
"""
|
||||||
|
Louvain算法
|
||||||
|
"""
|
||||||
|
|
||||||
|
Logger.info("Louvain算法")
|
||||||
|
|
||||||
|
# 加载karate俱乐部图
|
||||||
|
G = nx.karate_club_graph()
|
||||||
|
|
||||||
|
# 计算最优分区
|
||||||
|
partition = community_louvain.best_partition(G)
|
||||||
|
|
||||||
|
# 绘制结果(可选)
|
||||||
|
pos = nx.spring_layout(G)
|
||||||
|
plt.figure(figsize=(6, 6))
|
||||||
|
nx.draw_networkx_nodes(G, pos, cmap=plt.cm.coolwarm, 电压=partition.values())
|
||||||
|
nx.draw_networkx_edges(G, pos, alpha=0.5)
|
||||||
|
plt.title('Louvain communities')
|
||||||
|
plt.show()
|
40
web/views.py
40
web/views.py
|
@ -1,42 +1,2 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from rest_framework import viewsets
|
|
||||||
from rest_framework.parsers import MultiPartParser, FormParser, JSONParser
|
|
||||||
|
|
||||||
from web.models import TrainingSensitiveWord
|
|
||||||
from web.serializers import TrainingSensitiveWordSerializer
|
|
||||||
|
|
||||||
|
|
||||||
class TrainingSensitiveWordSerializerViewSet(viewsets.ModelViewSet):
|
|
||||||
"""
|
|
||||||
CRUD 功能
|
|
||||||
"""
|
|
||||||
authentication_classes = []
|
|
||||||
permission_classes = []
|
|
||||||
|
|
||||||
# 解析方式
|
|
||||||
parser_classes = (MultiPartParser, FormParser, JSONParser)
|
|
||||||
|
|
||||||
queryset = TrainingSensitiveWord.objects.all()
|
|
||||||
serializer_class = TrainingSensitiveWordSerializer
|
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
|
||||||
"""新建一条音乐"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def list(self, request, *args, **kwargs):
|
|
||||||
"""全部音乐数据"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def retrieve(self, request, *args, **kwargs):
|
|
||||||
"""查询一条数据"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def update(self, request, *args, **kwargs):
|
|
||||||
"""更新一条音乐数据"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def destroy(self, request, *args, **kwargs):
|
|
||||||
"""删除一条数据"""
|
|
||||||
pass
|
|
Loading…
Reference in New Issue
Block a user