开始

  1. 新建virtualenv环境

  2. 新建django容器 python manage.py

  3. 新建django应用 python manage.py

  4. 修改容器setting.py导入django应用

路由定义

路由定义容器路径下urls.py,需要先在应用里定义号试图函数,然后才能做转发

from django.contrib import admin
from django.urls import path
from scanhosts.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('sendinfos/', send_infos),
    path('getinfos/', get_infos),
]

视图函数

from django.http import JsonResponse, HttpResponse
from django.shortcuts import render
from scanhosts.models import *
import logging
import json

logger = logging.getLogger('django')


def send_infos(request):
    ip_addr = request.META['REMOTE_ADDR']
    user_agent = request.META['HTTP_USER_AGENT']
    logger.info('start query user ip...')
    user_obj = UserIPInfo.objects.filter(ip=ip_addr)
    if not user_obj:
        res = UserIPInfo.objects.create(ip=ip_addr)
        ip_addr_id = res.id
        logger.info('not found user ip...')
    else:
        ip_addr_id = user_obj[0].id
        logger.info('found user ip [{}]...'.format(user_obj[0].ip))
    BrowserInfo.objects.create(user_agent=user_agent, user_ip_id=ip_addr_id)
    result = {
        'status': 'success',
        'info': 'user info',
        'ip': ip_addr,
        'ua': user_agent,
    }
    logging.info('return response...')
    return HttpResponse(json.dumps(result), content_type='application/json')


def get_infos(request):
    ip_list = UserIPInfo.objects.all()
    infos = {}
    for item in ip_list:
        infos[item.ip] = [bro_his.user_agent for bro_his in BrowserInfo.objects.filter(user_ip_id=item.id)]
    return HttpResponse(json.dumps({'status': 'success', 'result': infos}), content_type='application/json')

模型定义

模型定义属于应用级下的models.py,大体语法和flask相似

from django.db import models

class UserIPInfo(models.Model):
    ip = models.CharField(max_length=40, default='', verbose_name='IP地址', null=True)
    time = models.DateTimeField(verbose_name='更新时间', auto_now=True)

    class Meta:
        verbose_name = '用户访问地址信息表'
        verbose_name_plural = verbose_name
        db_table = "user_ip_info"


class BrowserInfo(models.Model):
    user_agent = models.CharField(max_length=100, default='', verbose_name='浏览器客户端', null=True)
    models.CharField(max_length=256, verbose_name='唯一设备ID', default='')
    user_ip = models.ForeignKey('UserIPInfo', on_delete='CASCADE')

    class Meta:
        verbose_name = '浏览器信息表'
        verbose_name_plural = verbose_name
        db_table = 'browser_info'

模型迁移

这方面也和flask相似,先生成迁移文件,然后执行迁移,除了语法不同的是,django会默认多创建出很多关于用户权限的表

# 生成迁移文件
python manage.py makemigrations
# 执行迁移
python manage.py migrate

数据库DB配置

init_params = ['SET storage_engine=INNODB',
               'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
               'autocommit=1',
               'names "utf8";']
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'devops',
        'USER': 'devops',
        'PASSWORD': 'devops',
        'HOST': '192.168.1.150',
        'PORT': 3003,
        'OPTIONS': {},
        'init_command': ', '.join(init_params),
    }
}

results matching ""

    No results matching ""