zoukankan      html  css  js  c++  java
  • Django基础04

    Django入门引导

    Django工程结构

    Django分为容器项目和应用项目
    一个容器项目下可以存在多个应用项目
    容器项目并没有实际作用,可以修改容器项目名称,并不影响工程的运行

    建立容器项目和应用项目

    创建容器项目

    #安装Django
    pip3 install django==2.2.2
    #创建容器项目
    django-admin startproject devops
    


    devops 是应用项目

    init.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件

    setting.py django框架的核心配置文件

    urls.py django路由设置文件

    manage.py 是命令管理工具,管理django容器及项目工程启动、关闭、数据迁移等
    使用python3启动django,需要修改manage.py文件

    
    #!/usr/bin/env python
    """Django's command-line utility for administrative tasks."""
    import os
    import sys
    #新添加内容
    import pymysql
    pymysql.install_as_MySQLdb()
    #新添加内容
    
    def main():
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'devops.settings')
        try:
            from django.core.management import execute_from_command_line
        except ImportError as exc:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            ) from exc
        execute_from_command_line(sys.argv)
    
    
    if __name__ == '__main__':
        main()
    

    创建应用

    修改devops/settings.py文件

    #注释内容
    # Database
    # https://docs.djangoproject.com/en/2.2/ref/settings/#databases
    
    #DATABASES = {
    #    'default': {
    #        'ENGINE': 'django.db.backends.sqlite3',
    #        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    #    }
    #}
    #注释内容
    #新增内容
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'mydevops',
            'USER': 'admin',
            'PASSWORD': 'admin',
            'HOST': '127.0.0.1',
            'PORT': '',
            'OPTIONS': {
            "init_command": "SET sql_mode='STRICT_TRANS_TABLES'", #设置严格模式
        },
            'init_command': 'SET storage_engine=INNODB,'
                            'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED, autocommit=1, names "utf8";',
        }
    }
    
    #新增内容
    

    创建应用项目

    python3 ./manage.py startapp scanhosts
    


    models.py 模型文件,用于操作数据库
    views.py 视图文件,可以理解为控制器,用于做逻辑处理
    migrations 目录,保存临时数据文件,用于文件迁移

    modles模型建立

    settings文件配置

    查看基础路径

    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    print("...........................{}".format(BASE_DIR))
    


    添加scanhosts应用到配置文件

    # Application definition
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'scanhosts', #新加应用配置文件
    ]
    

    model模型建模

    参考链接

    编辑models.py文件

    #coding=utf-8
    
    from django.db import models
    
    # Create your models here.
    class UserIPInfo(models.Model):
    	ip = models.CharField(max_length=40, default='',verbose_name=u'ip地址',null=True)
    	time = models.DateTimeField(verbose_name=u'更新时间', auto_now=True)
    
    	class Meta:
    		verbose_name =u'用户访问地址信息表'
    		verbose_name_plural = verbose_name
    		db_table = 'useripinfo'
    
    
    class BrowseInfo(models.Model):
    	useragent = models.CharField(max_length=255,default='',verbose_name=u'用户浏览器agent信息',null=True)
    	models.CharField(max_length=256,verbose_name=u'唯一设备ID',default=u'')
    	userip = models.ForeignKey(to='UserIPInfo',related_name='userip',on_delete=models.CASCADE)
    
    	class Meta:
    		verbose_name =u'用户浏览器信息表'
    		verbose_name_plural = verbose_name
    		db_table = 'browseinfo'
    

    创建数据库

    mysql -uroot -proot -e "create database mydevops;"
    #允许使用127.0.0.1登录
    mysql -uroot -proot -e "grant all on mydevops.* to admin@'127.0.0.1' identified by 'admin';"
    #允许任意外部连接
    mysql -uroot -proot -e "grant all on mydevops.* to admin@'%' identified by 'admin';"
    mysql -h127.0.0.1  -uadmin -padmin -e "show databases;"
    

    字段类型:

    CharField:字符串字段
    IntegerField:整数型字段
    DateTimeField:时间日期字段
    ForeignKey:定义多对一关系

    迁移


    迁移命令

    python3 ./manage.py makemigrations
    python3 ./manage.py migrate
    


    登录数据库查询

    MariaDB [mydevops]> show create table browseinfoG;
    *************************** 1. row ***************************
           Table: browseinfo
    Create Table: CREATE TABLE `browseinfo` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `useragent` varchar(255) DEFAULT NULL,
      `userip_id` int(11) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `browseinfo_userip_id_f280e3ca_fk_useripinfo_id` (`userip_id`),
      CONSTRAINT `browseinfo_userip_id_f280e3ca_fk_useripinfo_id` FOREIGN KEY (`userip_id`) REFERENCES `useripinfo` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    ERROR: No query specified
    
    MariaDB [mydevops]> show create table useripinfoG;
    *************************** 1. row ***************************
           Table: useripinfo
    Create Table: CREATE TABLE `useripinfo` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `ip` varchar(40) DEFAULT NULL,
      `time` datetime(6) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    

    项目设计

    项目开发

    采集接口

    No. url 视图
    1 http://127.0.0.01/sendinfos userinfo

    提示:在settings文件中,允许所有主机访问服务需要开启

    ALLOWED_HOSTS = ['*']
    

    devops/urls.py

    from django.contrib import admin
    from django.urls import path
    
    from scanhosts.views import *
    
    urlpatterns = [
        path('admin/', admin.site.urls),
    	path('sendinfos/',user_info),
    ]
    

    scanfhosts/views.py

    from django.shortcuts import render
    from django.http import JsonResponse, HttpResponse
    from scanhosts.models import *
    import json
    
    # Create your views here.
    
    def user_info(request):
    	ip_addr = request.META['REMOTE_ADDR']
    	user_ua = request.META['HTTP_USER_AGENT']
    	
    	user_obj = UserIPInfo.objects.filter(ip = ip_addr)
    	if not user_obj:
    		res = UserIPInfo.objects.create(ip = ip_addr)
    		ip_add_id = res.id
    	else:
    		ip_add_id = user_obj[0].id
    	
    	BrowseInfo.objects.create(useragent = user_ua,userip_id = ip_add_id )
    	
    	result = {
    		"STATUS":"success",
    		"INFO":"User info",
    		"IP":ip_addr,
    		"UA":user_ua
    		}
    	return HttpResponse(json.dumps(result), content_type = "application/json")
    

    第一个DevOPS工程

    Django日志logging模块

    Django邮件发送

  • 相关阅读:
    搜索框
    鼠标hover时改变图片透明度和颜色(方法二)
    让背景带上颜色
    右侧固定导航栏
    react native环境配置
    左侧固定导航栏
    鼠标hover时改变图片透明度和颜色
    androidSDK配置环境变量
    cordova插件开发
    Python电子书分享
  • 原文地址:https://www.cnblogs.com/anyux/p/11922057.html
Copyright © 2011-2022 走看看