Django基础配置-创建项目-应用-定义模型-定义数据库-测试数据操作

作者: 鲁智深 分类: django 发布时间: 2018-01-14 15:03

简介:

它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

MVT

Django是一款python的web开发框架

与MVC有所不同,属于MVT框架

m表示model,负责与数据库交互

v表示view,是核心,负责接收请求、获取数据、返回结果

t表示template,负责呈现内容到浏览器

Python框架介绍

python这门语言也有软件框架,知名的框架有:

做网站的: Django、 Tornado、 Flask、 web2py…

做数据挖掘: scrapy pyspider

做科学和数学运算的: SciPy Pandas IPython Numpy, maplatlib

做测试: selenium

做算法开发: Buildbot Trac Roundup

做系统管理:Ansible Salt OpenStack

做游戏:pygame

推荐的技术栈:语言python2/python3,服务器linux,ubuntu,数据库mysql,redis,框架django,代码编辑器pycharm

安装django

1
2
#默认安装, 默认安装最新的
pip install django
1
2
#指定安装版本
pip install django==1.10
1
2
3
#查看版本:进入python shell,运行如下代码
import django
django.get_version()

安装成功会有提示!

创建项目和应用

1
2
3
django-admin startproject 项目名
cd 项目目录
python manage.py startapp 应用名
项目结构

项目结构

下面操作都可以在pycharm中完成

项目和应用关联

在settings.py 中找到INSTALLED_APPS, 添加进入应用名

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'MyBlog',
]

定义模型

在models.py中

1
2
class xxxx(models.Modes):
    pass

类似:哪个表就是对应哪个类,哪个字段对应哪个类属性,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from django.db import models

class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub_date = models.DateTimeField()
    def _ _str_ _(self):
        return "%d" % self.pk

class HeroInfo(models.Model):
    hname = models.CharField(max_length=20)
    hgender = models.BooleanField()
    hcontent = models.CharField(max_length=100)
    hBook = models.ForeignKey('BookInfo')
    def _ _str_ _(self):
        return "%d" % self.pk

存在基类的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#基类
class Bolginfo(models.Model):
    isdelete = models.BooleanField(default=False,verbose_name='逻辑删除')

    class Meta:
        abstract = True
       
#文章
class Article(Bolginfo):
    title = models.CharField(max_length=20,verbose_name="文章标题")
    push_date = models.DateTimeField(verbose_name="发布日期")
    content = models.TextField(verbose_name='内容')
    click_num = models.IntegerField(verbose_name="阅读数")

    #外健
    author = models.ForeignKey('Author',verbose_name="作者")
    comment = models.ForeignKey('Comment',verbose_name="评论")
    category = models.ForeignKey('Category',verbose_name="分类")
    tag = models.ManyToManyField('Tag',verbose_name="标签")

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = verbose_name
        db_table = 'article'
        ordering = ['id']

    def __unicode__(self):
        return self.title

定义数据库类型

1. 更改settings.py的databases: 数据库引擎, 数据库名,

1
2
3
4
5
6
7
8
9
10
DATABASES = {
   'default': {
   'ENGINE': 'django.db.backends.mysql',#使用mysql
   'NAME': '数据库名字',
   'HOST':'ip地址',
   'PORT': 端口,
   'USER': '账户',
   'PASSWORD':'密码',
        }
}

2. 在项目的同名目录下找到初始话文件: __init__.py

1
2
import pymysql
pymysql.install_as_MySQLdb()

3. 创建数据库

进入mysql创建数据库

1
create database 数据库名;

4. 数据库的迁移

1
2
python manage.py makemigrations  #创建迁移的脚本
python manage.py migrate       # 迁移数据库
1
2
#指定某个应用进行数据库迁移
python manage.py makemigrations 应用名

数据库迁移就是django将models文件中写好的程序,转化成sql语句,映射到mysql中执行。

测试数据操作

运行如下命令可以开启服务器

1
python manage.py runserver

进入python shell,进行简单的模型API练习

1
python manage.py shell

进入shell后提示如下:

python shell

python shell

引入需要的包:需要什么导入什么

1
2
3
from 应用名称.文件名 import 模型类1,模型类2
from django.utils import timezone
from datetime import *

插入数据

1
User.objects.create(username='笑笑',email='ayingfeng@qq.com',password='123456')

查询数据库所有信息

1
模型类1.objects.all()

插入信息

1
2
3
4
b = 模型类1()
b.字段1="射雕英雄传"
b.字段2=datetime(year=1990,month=1,day=10)
b.save()#执行实例b插入

查找图书信息:

1
b=模型类1.objects.get(pk=1)

输出信息

1
2
3
b
b.id
b.btitle

修改信息

1
2
b.btitle="天龙八部"
b.save()

删除信息

1
b.delete()#立即删除对象且没有返回值

关联对象的操作

对于HeroInfo可以按照上面的操作方式进行

添加,注意添加关联对象

1
2
3
4
5
6
h=HeroInfo()
h.htitle=u'郭靖'
h.hgender=True
h.hcontent=u'降龙十八掌'
h.hBook=b
h.save()

获得关联集合:返回当前book对象的所有hero

1
b.heroinfo_set.all()

有一个HeroInfo存在,必须要有一个BookInfo对象,提供了创建关联的数据:

1
2
h=b.heroinfo_set.create(htitle=u'黄蓉',hgender=False,hcontent=u'打狗棍法')
h

_set反向查询如果模型I有一个ForeignKey,那么该ForeignKey 所指的模型II实例可以通过一个管理器返回前面有ForeignKey的模型I的所有实例。默认情况下,这个管理器的名字为foo_set,其中foo 是源模型的小写名称。该管理器返回的查询集可以用上一节提到的方式进行过滤和操作

打印sql日志到控制台

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注