之前在windows电脑上采用FLASK架构开发了一个防火墙策略自动生成的工具,现想通过Django框架实现这一功能。
实现过程、问题、解决方法如下:
1、创建Django项目
django-admin startproject storm02
2、创建app
python manage.py startapp myapp
3、将FW_Policy_auto_create_django.py放在myapp目录下
(py3_conda) [root@centos7 myapp]# pwd
/root/storm02/myapp
(py3_conda) [root@centos7 myapp]# ls
admin.py apps.py FW_Policy_auto_create_django.py __init__.py migrations models.py __pycache__ tests.py views.py
(py3_conda) [root@centos7 myapp]#
4、安装APP
将myapp添加到Django项目的配置中。在myproject/settings.py文件中找到INSTALLED_APPS设置项,并添加你的App名称:
INSTALLED_APPS = [
# ... 其他App
'myapp',
]
5、修改允许的主机地址
在myproject/settings.py文件中找到ALLOWED_HOSTS设置项,并添加允许运行该项目的主机地址:
ALLOWED_HOSTS = ['*']
*表示允许所有主机地址
6、在myapp目录的views.py文件中定义一个视图函数,并在函数中调用您新建的.py文件中的函数或逻辑。
(py3_conda) [root@centos7 myapp]# cat views.py
from .FW_Policy_auto_create_django import FW_Policy_Auto_Create
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
from django.http import JsonResponse
import json
@csrf_exempt #Django默认启用了CSRF保护来防止CSRF攻击,此处关闭该功能
def my_view(request):
if request.method == 'POST': #客户端通过POST推送数据
# 获取POST数据
request_data = json.loads(request.body) #客户端推送的数据格式为json,服务端需要json解析,否则无法获取到需求数据
demand_data=request_data["data"] #获取需求数据中的字典“data”的数据
# 进行运算或处理
result = FW_Policy_Auto_Create(demand_data) #运用myapp中的FW_Policy_auto_create_django.py文件中的FW_Policy_Auto_Create函数进行运算
return JsonResponse(result) #返回json数据给客户端,result需要为字典格式,否则报错
# 如果不是POST请求,返回错误响应
return JsonResponse({'error': 'Invalid request method'}, status=400) #如果请求方式不是post,则报错,例如http方式无法访问此路径,报错400
(py3_conda) [root@centos7 myapp]#
7、在项目的urls.py文件中,将该视图函数与一个URL路径进行关联。
(py3_conda) [root@centos7 storm02]# cat urls.py
"""
URL configuration for storm02 project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from myapp.views import my_view
urlpatterns = [
path('admin/', admin.site.urls),
path('my-url/',my_view), #创建一个新的url,并与刚才创建的myapp.views中的my_view函数关联
]
(py3_conda) [root@centos7 storm02]#
8、启动django项目,在项目根目录下运行python manage.py runserver 0.0.0.0:8000
9、客户端通过访问http://serverip:8000/my-url/ 推送需求数据