美文网首页
django 迁移总结

django 迁移总结

作者: 恬恬i阿萌妹O_o | 来源:发表于2018-10-21 19:04 被阅读0次

    生成迁移文件:1.进入虚拟环境 或 创建虚拟环境 mkvirtualenv cc / workon cc
    2.安装django1.11的包 pip install django==1.11
    3.创建项目 django-admin startproject 项目名称 例如:django-admin startproject test1
    4.进入项目 创建应用:cd test1 python manage.py startapp booktest
    5.安装应用 在setting文件中配置'booktest', 更改链接数据库MySQL的~~~
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'test2', #数据库名字,
    'USER': 'root', #数据库登录用户名
    'PASSWORD': 'mysql', #数据库登录密码
    'HOST': 'localhost', #数据库所在主机
    'PORT': '3306', #数据库端口
    }
    }
    配置中文LANGUAGE_CODE = 'zh-hans' #使用中国语言
    TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
    在mysql里面创建数据库 ,字符集是utf8 create database test2 charset=utf8;
    6.运行文件 pyrhn manage.py runserver 默认IP是127.0.0.1,默认端口为8000 ,可以不写
    7.在models.py中定义模型 from django.db import models
    class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub_date = models.DateField()
    8. 在init文件中加上 import pymysql pymysql.install__as__MySQLdb()
    9.下载pymysql pip install pymysql
    10.生成迁移文件 python manage.py makemigrations
    11.执行迁移文件 python manage.py migrate
    进入脚本 python manage.py shell
    导入booktest/models中的类:from booktest.models import BookInfo,HeroInfo
    查询所有图书信息:BookInfo.objects.all()
    新建图书对象:b=BookInfo()
    b.btitle="射雕英雄传 "
    from datetime import date
    b.bpub_date=date(1991,1,31)
    b.save()
    再次查询所有图书信息:BookInfo.objects.all()
    查找图书信息并查看值:b=BookInfo.objects.get(id=1)
    b
    b.id
    b.btitle
    创建管理员:python manage.py createsuperuser
    启动服务器:python manage.py runserver
    打开浏览器 ctrl + c,在地址栏中输入如下地址后回车 http://127.0.0.1:8000/admin/
    视图:配置URLconf
    查找视图的过程 请求者在浏览器地址栏中输入url,请求到网站后,获取url信息,然后与编写好的URLconf逐条匹配,如果匹配成功则调用对应的视图函数,如果所有的URLconf都没有匹配成功,则返回404错误。
    一条URLconf包括url规则、视图两部分:1.url规则使用正则表达式定义。
    2.视图就是在views.py中定义的视图函数。
    需要两步完成URLconf配置:1.在应用中定义URLconf
    2.包含到项目的URLconf中
    在booktest/应用下创建urls.py文件,定义代码如下:from django.conf.urls import url
    from booktest import views
    urlpatterns = [
    url(r'^$', views.index),
    ]
    含到项目中:打开test1/urls.py文件,为urlpatterns列表增加项如下:url(r'^', include('booktest.urls')),test1/urls.py文件完整代码如下: from django.conf.urls import include, url
    from django.contrib import admin
    urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('booktest.urls')),
    创建模板: 设置查找模板的路径:打开test1/settings.py文件,设置TEMPLATES的DIRS值
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    定义模板:打开templtes/booktest/index.html文件,定义代码如下:
    <html>
    <head>
    <title>图书列表</title>
    </head>
    <body>
    <h1>{{title}}</h1>
    {%for i in list%}
    {{i}}

    {%endfor%}
    </body>
    </html>
    打开booktst/views.py文件,调用上面定义的模板文件
    from django.http import HttpResponse
    from django.template import loader
    def index(request):

    1.获取模板

    template=loader.get_template('booktest/index.html')

    2.定义上下文

    context={'title':'图书列表','list':range(10)}

    3.渲染模板

    return HttpResponse(template.render(context))
    视图调用模板简写:from django.shortcuts import render
    def index(request):
    context={'title':'图书列表','list':range(10)}
    return render(request,'booktest/index.html',context)]
    属性命名限制:1.不能是python的保留关键字。
    2.不允许使用连续的下划线,这是由django的查询方式决定的,在后面会详细讲解查询。
    3.定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:属性=models.字段类型(选项)
    字段类型:使用时需要引入django.db.models包
    1.AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。(必须填入参数primary_key=True)
    2.BooleanField:布尔字段,值为True或False。
    3.NullBooleanField:支持Null、True、False三种值。
    4.CharField(max_length=字符长度):字符串。参数max_length表示最大字符个数。
    5.TextField:大文本字段,一般超过4000个字符时使用。
    6.IntegerField:整数。
    7.DecimalField(max_digits=None, decimal_places=None):十进制浮点数。 1.参数max_digits表示总位数。2. 参数decimal_places表示小数位数。
    8.FloatField:浮点数。
    9.DateField[auto_now=False, auto_now_add=False]):日期。
    10.TimeField:时间,参数同DateField。
    11.DateTimeField:日期时间,参数同DateField。
    12.FileField:上传文件字段。
    选项: 1.null:如果为True,表示允许为空,默认值是False。
    2.blank:如果为True,则该字段允许为空白,默认值是False。
    3.对比:null是数据库范畴的概念,blank是表单验证范畴的。
    4.db_column:字段的名称,如果未指定,则使用属性的名称。
    5.db_index:若值为True, 则在表中会为此字段创建索引,默认值是False。
    6.default:默认值。
    7.primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。
    8.unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。
    字段查询:
    实现sql中where的功能,调用过滤器filter()、exclude()、get(),下面以filter()为例。
    属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线。
    属性名称__比较运算符=值
    查询mysql数据库日志:
    查看mysql数据库日志可以查看对数据库的操作记录。 mysql日志文件默认没有产生,需要做如下配置:
    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
    把68,69行前面的#去除,然后保存并使用如下命令重启mysql服务。sudo service mysql restart
    条件查询:

    1. 查询等: exact:表示判等 ==。
      例:查询编号为1的图书。
      list=BookInfo.objects.filter(id__exact=1) 或 list=BookInfo.objects.filter(id=1)
    2. 模糊查询 : contains:是否包含。
      例:查询书名包含'传'的图书。
      list = BookInfo.objects.filter(btitle__contains='传')
      startswith、endswith:以指定值开头或结尾。
      例:查询书名以'部'结尾的图书
      list = BookInfo.objects.filter(btitle__endswith='部')
      以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.
    3. 空查询 : isnull:是否为null。
      例:查询书名不为空的图书。
      list = BookInfo.objects.filter(btitle__isnull=False)
    4. 范围查询 : in:是否包含在范围内。
      例:查询编号为1或3或5的图书
      list = BookInfo.objects.filter(id__in=[1, 3, 5])
    5. 比较查询 : gt、gte、lt、lte:大于、大于等于、小于、小于等于。
      例:查询编号大于3的图书
      list = BookInfo.objects.filter(id__gt=3)
      不等于的运算符,使用exclude()过滤器。
      例:查询编号不等于3的图书
      list = BookInfo.objects.exclude(id=3)
    6. 日期查询 : year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。
      例:查询1980年发表的图书。
      list = BookInfo.objects.filter(bpub_date__year=1980)
      例:查询1980年1月1日后发表的图书。
      list = BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1))
      F对象
      之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。
      语法如下:F(属性名)
      例:查询阅读量大于等于评论量的图书。
      from django.db.models import F
      list = BookInfo.objects.filter(bread__gte=F('bcomment'))
      可以在F对象上使用算数运算。
      例:查询阅读量大于2倍评论量的图书。
      list = BookInfo.objects.filter(bread__gt=F('bcomment') * 2)
      Q对象
      多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。
      例:查询阅读量大于20,并且编号小于3的图书。
      list=BookInfo.objects.filter(bread__gt=20,id__lt=3) 或 list=BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)
      如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。
      语法如下:
      Q(属性名运算符=值)
      例:查询阅读量大于20的图书,改写为Q对象如下。
      from django.db.models import Q
      list = BookInfo.objects.filter(Q(bread__gt=20))
      Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。
      例:查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现
      list = BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3))
      Q对象前可以使用~操作符,表示非not。
      例:查询编号不等于3的图书。
      list = BookInfo.objects.filter(~Q(pk=3))
      聚合函数:
      使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg,Count,Max,Min,Sum,被定义在django.db.models中。
      例:查询图书的总阅读量 : from django.db.models import Sum list = BookInfo.objects.aggregate(Sum('bread'))
      注意aggregate的返回值是一个字典类型,格式如下
      {'聚合类小写
      属性名':值} 如:{'sum__bread':3}
      使用count时一般不使用aggregate()过滤器。
      例:查询图书总数。
      list = BookInfo.objects.count()
      注意count函数的返回值是一个数字。
      django 模型[查询集]
      什么是查询集(结果集):查询集表示从数据库中获取的对象集合,在管理器上调用某些过滤器方法会返回查询集,查询集可以 含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果,从Sql的角度,查询集和select语句等价,过滤器像where和limit子句。
      1 .返回查询集的过滤器如下:
      1.1 all():返回模型类对应表的所有数据,返回值是QuerySet类型
      1.2 filter():返回满足条件的数据,返回值是QuerySet类型,参数可以写查询条件
      1.3 exclude(): 返回满足条件之外的数据(即:不满足条件的数据),返回值是QuerySet类型,参数可以写查询条件
      提示:相当于sql语句中where部分的not关键字
      1.4 order_by(): 对结果进行排序,返回值是QuerySet类型,参数可以写排序中的字段
    1. 返回单个值的过滤器如下:
      2.1 get(): 返回单个满足条件的对象(有且只能有一条数据),参数可以是查询条件
      如果未找到会引发"模型类.DoesNotExist"异常。
      如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常。
      2.2 count():返回当前查询结果的总条数,返回值是一个数字.
      2.3 aggregate():进行聚合操作,返回一个字典。
      from django.db.models import Sum,Count,Avg,Max,Min
    2. 判断某一个查询集中是否有数据:
      exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。
      二、查询集两大特性
      1、惰性查询
      惰性查询:只有在实际使用查询集中的数据的时候,才会发生对数据库的真正查询, 调用数据的情况包括迭代,序列化,与if合用
      示例:查询所有,编辑booktest/views.py的index视图,运行查看。
      list=BookInfo.objects.all()
      2、查询集的缓存
      当使用的是同一个查询集时,第一次的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询集时,使用的是缓存中的结果集
      演示: 运行项目shell : python manage.py shell
      三、限制查询集
      可以对一个查询集进行 取下标或切片 操作,等同于sql中的limit和offset子句。
      如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。
      示例:获取第1、2项,运行查看。 list=BookInfo.objects.all()[0:2]
      django 模型[关联]:
      模型类关系
      关系字段类型
      关系型数据库的关系包括三种类型:
      ForeignKey:一对多,将字段定义在多的一端中。
      ManyToManyField:多对多,将字段定义在任意一端中。
      OneToOneField:一对一,将字段定义在任意一端中。
      可以维护递归的关联关系,使用'self'指定,详见"自关联"。
      一对多关系: 参见booktest应用中的BookInfo类和HeroInfo类。
      多对多关系:新闻类和新闻类型类,一个新闻类型下可以用很多条新闻,一条新闻也可能归属于多种新闻类型。
      关联查询:
      由一到多的访问语法: 一对应的模型类对象.多对应的模型类名小写set
      例:b = BookInfo.objects.get(id=1)
      b.heroinfo_set.all()
      由多到一的访问语法: 多对应的模型类对象.多对应的模型类中的关系类属性名
      例:h = HeroInfo.objects.get(id=1)
      h.hbook
      访问一对应的模型类关联对象的id语法: 多对应的模型类对象.关联类属性id
      例:h = HeroInfo.objects.get(id=1)
      h.book_id
      python manage.py shell
      由多模型类条件查询一模型类数据: 关联模型类名小写
      属性名条件运算符=值
      如果没有"
      运算符"部分,表示等于,结果和sql中的inner join相同。
      例:查询图书,要求图书中英雄的描述包含'八'。 list = BookInfo.objects.filter(heroinfo__hcontent__contains='八')
      由一模型类条件查询多模型类数据: 语法如下:一模型类关联属性名一模型类属性名条件运算符=值
      例:查询书名为“天龙八部”的所有英雄。 list = HeroInfo.objects.filter(hbook__btitle='天龙八部')
      自关联:自关联是一种特殊的一对多的关系
      打开booktest/views.py文件,定义视图area。
      from booktest.models import AreaInfo
      ...

    查询广州市的信息

    def area(request):
    area = AreaInfo.objects.get(pk=440100)
    return render(request, 'booktest/area.html', {'area': area})
    打开booktest/urls.py文件,新建一条url。
    urlpatterns = [
    ...
    url(r'^area/$', views.area),
    ]
    在templates/booktest目录下,新建area.html文件。
    <html>
    <head>
    <title>地区</title>
    </head>
    <body>
    当前地区:{{area.atitle}}



    上级地区:{{area.aParent.atitle}}


    下级地区:
    <ul>
    {%for a in area.areainfo_set.all%}
    <li>{{a.atitle}}</li>
    {%endfor%}
    </ul>
    </body>
    </html>
    运行服务器。
    python manage.py runserver
    14_django 模型[模型类扩展]
    模型实例方法
    1.str():在将对象转换成字符串时会被调用。
    2.save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句。
    3.delete():将模型对象从数据表中删除,ORM框架会转换成对应的delete语句。
    模型类的属性
    属性objects:管理器,是models.Manager类型的对象,用于与数据库进行交互。
    当没有为模型类定义管理器时,Django会为每一个模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects。
    为模型类BookInfo定义管理器books语法如下:
    class BookInfo(models.Model):
    books = models.Manager()
    管理器Manager
    管理器是Django的模型进行数据库操作的接口,Django应用的每个模型类都拥有至少一个管理器。Django支持自定义管理器类,继承自models.Manager。
    自定义管理器类主要用于两种情况:
    1.修改原始查询集,重写all()方法
    2.向管理器类中添加额外的方法,如向数据库中插入数据。
    元选项
    在模型类中定义类Meta,用于设置元信息,如使用db_table自定义表的名字。
    数据表的默认名称为:<app_name>_<model_name>例: booktest_bookinfo
    视图
    视图的功能:视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse给请求者。
    使用视图的过程:视图就是一个python函数,被定义在"应用/views.py"文件中。 使用视图时需要进行两方面操作,两个操作不分先后。
    视图就是python中的函数,视图一般被定义在"应用/views.py"文件中,此例中为"booktest/views.py"文件。视图必须返回一个HttpResponse对象或子对象作为响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误等。
    视图的第一个参数必须为HttpRequest实例,还可能包含下参数如:
    1.通过正则表达式组获得的关键字参数。
    2.通过正则表达式组获取的位置参数。
    17_django视图[HttpRequest]
    HttpRequest对象
    服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以。视图的第一个参数必须是HttpRequest对象,在django.http模块中定义了HttpRequest对象的API。
    属性
    下面除非特别说明,属性都是只读的。
    path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
    method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'。
    在浏览器中给出地址发出请求采用get方式,如超链接。
    在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求。
    encoding:一个字符串,表示提交的数据的编码方式。
    如果为None则表示使用浏览器的默认设置,一般为utf-8。
    这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
    GET:QueryDict类型对象,类似于字典,包含get请求方式的所有参数。
    POST:QueryDict类型对象,类似于字典,包含post请求方式的所有参数。
    FILES:一个类似于字典的对象,包含所有的上传文件。
    COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串。
    session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见"状态保持"。

    相关文章

      网友评论

          本文标题:django 迁移总结

          本文链接:https://www.haomeiwen.com/subject/yhxizftx.html