Forty-six Django+orm

 纠错:名称空间内,下面的django1改为2

1、URL 反向解析

# URL  原理:只要name不变,那么前面的路径怎么变,都不会影响到功能
path('login/', views.login, name='login')
# views
from django.urls import revers
url = reverse('login')
# 模板中
{% url 'login' %}
# 好处:便于拓展,当你的url发生改变时,通过反向解析
直接能获取最新的URL,不用自己手动修改

2、名称空间

# 背景:多个app时,下面有同名的name时,可以通过指定名称空间。
# 来定位到具体URL
# django1 与 django2 的区别:
# django1:
    url('^app01/', include('app01.urls', namespace='app01'))
# django2
    path('app01/', include('appo1.urls, 'app01'))
# views
url = reverse('app01:login')    # login是app01下的
# 模板中
{% url 'app01:login' %}

3、ORM 对象关系映射

  优点:

    1、写python 代码,实现对数据表的相关操作。提高开发效率

    2、平滑切换数据库

  缺点:

    1、python代码,转化SQL需要时间,效率相对会有影响

    2、SQL 能力下降

  django如何使用mysql 数据库:

1、手动创建数据库
    create database 库名 default charset=utf8;
2、setting 再配置
    DATABASES={
        'default':{
             'ENGINE': 'django.db.backends.mysql',
             'HOST': '127.0.0.1'  # 数据库所在ip
             'PORT': 3306,
             'NAME': '数据库名'
             'USER': '用户名',
             'PASSWORD' : ''  # 密码
        }
    }
3、配置init(settings同级)
    import pymysql
    pymysql.install_as_MySQLdb()
4、在models 里定义模型类
    from django.db import models
    class Book(models.Model):
        titile = models.CharFirld(max_length=32)
        ...
5、命令行输入命令
    python manage.py makemigrations    # 记录models变更记录
    python manage.py migrate    # 将数据同步到数据库
# 且会自动同步创建一个 migrations 目录及文件

4、表单操作

# 新增
#    方式一:
book = models.Book(title='xxx', price=...)
book.save()    # 同步到数据库
#    方式二(objects 管理对象):
models.Book.objects.create(title='xxx', price=...)    # 也有返回值
# 查询
# QuerySet 类似列表
all 返回所有数据 对象
filter 返回过滤满足条件的 对象列表
order_by 默认是升序,降序-
values 类似与字典
reverse 反转
distinct 去重
values_list 类似元组
exclude 跟filter 相反
# 返回对象
get 方法(多个结果和没有结果会报错,有且只能有一个才行)
first 方法 获取最开始的一个
last 方法 获取最后一个
# 返回数据类型
exists 返回值布尔值
count 返回int计数

 

posted @ 2019-03-15 09:37  pythonernoob  阅读(158)  评论(0)    收藏  举报