zoukankan      html  css  js  c++  java
  • Django 学习笔记

    官方文档

    https://www.djangoproject.com

    中文文档

    https://docs.djangoproject.com/zh-hans/2.0/

    django安装

    sudo /usr/local/python37/bin/pip install Django==1.8.2

    sudo /usr/local/python37/bin/pip install django-json-response --upgrade


    django-admin --version
    1.8.2
    需要注意pip的全路径,如果使用某个python版本目录的pip,则会将django安装到相应的python目录中;如果直接使用pip,则会将django安装到系统
    which django-admin
    /usr/bin/django-admin

    容器创建

    django-admin startproject mydevops

    应用创建

    cd mydevops/

    python manage.py startapp scanhosts

    将应用加入容器

    vim mydevops/settings.py

    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'scanhosts',
    )

    数据库的详细配置可以参考

    https://docs.djangoproject.com/zh-hans/2.0/ref/databases/#mysql-notes

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'mydevops',
            'USER': 'admin',
            'PASSWORD': 'mysqlpass',
            'HOST':'127.0.0.1',
            'PORT':'3306',
            'OPTIONS': {},
            'init_command':'SET storage_engine=INNODB,'
                            'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED, autocommit=1,names "utf8"'
        },
    }

    数据库创建库与用户
    create database mydevops;

    grant all privileges on *.* to admin@'127.0.0.1' identified by 'mysqlpass';

    flush privileges;

    model模型

    CharField        字符串类型

    IntegerFiled     整数类型

    DateTimeField 时间日期字段

    ForeignKey     定义多对一关系

    修改新创建应用的models.py文件

    
    
    from django.db import models
    
    class UserIPInfo(models.Model):
        ip = models.CharField(max_length=40, default='', verbose_name=u'ip address', null=True)
        time = models.DateTimeField(verbose_name=u"updated time", auto_now=True)
    
        class Meta:
            verbose_name = u'user access adress message table'
            verbose_name_plural = verbose_name
            db_table = "useripinfo"
    
    class BrowseInfo(models.Model):
        useragent = models.CharField(max_length=100, default='', verbose_name=u'use agent message',null=True)
        models.CharField(max_length=256, verbose_name=u"unique id", default="")
    
        userip = models.ForeignKey('UserIPInfo')
    
    
        class Meta:
            verbose_name = u'user access adress message table'
            verbose_name_plural = verbose_name
            db_table = "browseinfo"
    
    


    模块迁移

     生成迁移文件

    [root@at2 mydevops]# python manage.py makemigrations
    Migrations for 'scanhosts':
      0001_initial.py:
        - Create model BrowseInfo
        - Create model UserIPInfo
        - Add field userip to browseinfo
    [root@at2 mydevops]# cd scanhosts/migrations/
    [root@at2 migrations]# ls
    0001_initial.py  __init__.py  __init__.pyc

    生成库表,然后去数据库中验证

    [root@at2 mydevops]# python manage.py migrate

    mysql> desc browseinfo;
    +-----------+--------------+------+-----+---------+----------------+
    | Field     | Type         | Null | Key | Default | Extra          |
    +-----------+--------------+------+-----+---------+----------------+
    | id        | int(11)      | NO   | PRI | NULL    | auto_increment |
    | useragent | varchar(100) | YES  |     | NULL    |                |
    | userip_id | int(11)      | NO   | MUL | NULL    |                |
    +-----------+--------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)

    模块更新

    比如,添加一个字段,或者改变一个字段长度,首先改变models.py

    useragent = models.CharField(max_length=200, default='', verbose_name=u'use agent message',null=True)

    然后再次执行,即可完成变更

    python manage.py makemigrations

    python manage.py migrate

     django交互界面

    $ python manage.py shell
    >>> from scanhosts.models import UserIPInfo
    >>> for item in UserIPInfo.objects.all():
    ...     print(item.__dict__)
    ...
    {'_state': <django.db.models.base.ModelState object at 0x7f2d2690a908>, 'id': 1, 'ip': '127.0.0.1', 'time': datetime.datetime(2019, 6, 23, 7, 11, 30, 474131, tzinfo=<UTC>)}
    {'_state': <django.db.models.base.ModelState object at 0x7f2d2690aa58>, 'id': 2, 'ip': '192.168.81.131', 'time': datetime.datetime(2019, 6, 23, 7, 17, 30, 121449, tzinfo=<UTC>)}
    {'_state': <django.db.models.base.ModelState object at 0x7f2d2690aac8>, 'id': 3, 'ip': '192.168.81.1', 'time': datetime.datetime(2019, 6, 23, 7, 18, 6, 749511, tzinfo=<UTC>)}



  • 相关阅读:
    elasticsearch + python
    Django中的监控组件Prometheus
    MySQL索引原理以及最左前缀原则
    Insert ignore,还是insert replace还是insert on duplicate key update区别
    PyTorch中Tensor与numpy数据之间时共享的条件:
    在Numpy中numpy.nan显示成-9223372036854775808的缘故
    mac上安装pil报错: ERROR: Could not find a version that satisfies the requirement pil (from versions: none):
    OSError: [Errno 48] Address already in use
    curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
    在实际项目中使用git推代码踩过的坑
  • 原文地址:https://www.cnblogs.com/perfei/p/11071969.html
Copyright © 2011-2022 走看看