一:路由系统
    url
    1.url(r'^index/', views.index),url(r'^home/',views.Home.as_view()), 一个url对应一个函数或一个类
    2.url(r'^detail-(\d+).html',views.detail), 一类url对应一个函数或一个类 动态url
    3.url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.detail), 正则表达式 第一数字匹配赋值给nid 在函数里面就不用考虑顺序 比较常用 动态url

        ps: def detail(request,*args,**kwargs):
                pass
    实战:
            1.
            url(r'^detail-(\d+)-(\d+).html',views.detail)
            def func(request,nid,uid):
                pass

            def func(request,*args):
                args=(2,6)
                pass

            2.
            url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.detail)
            def func(request,nid,uid):
                pass

            def func(request,**kwargs):
                kwargs={'nid':1,'uid':3}

    4.name:方便提交表单
    对URL路由关系进行命名,以后可以根据此名称自动生成自己想要的URL
    url(r'^index999999999/', views.index,name='indexx'),
    def func(request,*args,**kwargs):
        from django.urls import reverse
        reverse('indexx')  #生成index999999999

    url(r'^index999999999/(\d+)/(\d+)/', views.index,name='indexx'),
    def func(request,*args,**kwargs):
        from django.urls import reverse
        reverse('indexx',args=(1,6)) #生成index999999999/1/6

    url(r'^index999999999/(?P<nid>\d+)/(?P<uid>\d+)/', views.index,name='indexx'),
     def func(request,*args,**kwargs):
        from django.urls import reverse
        reverse('indexx',kwargs=('nid':11,'uid':66)) #生成index999999999/11/66

   xxxx.html
    {% url "indexx" %}       #对应index999999999
    {% url "indexx" 1 6 %}   #对应index999999999/1/6
    {% url "indexx" nid=11 uid=66 %}  #对应index999999999/11/66

    模板语言里面:
        {% url 'indexxx' %}
        {% url 'indexxx' 8 6  %}

        注:{{ request.path_info }} 当前页面url

     5.

二:视图
    request.POST
    request.GET
    request.FILES

    #获取checkbox等多选内容
    request.POST.getlist()

    #上传文件,form标签做特殊设置enctype="multipart/form-data"
    obj=request.FILES.get('fafafa')
    obj.name
    f=open(obj.name,mod='wb')
    for item in obj.chunks():
        f.write(item)
    f.close()

    FBV  function base view
    url.py
    index -->函数名
    view.py
       def 函数(request):
           ...

    CBV  class base view  执行类里面的指定的方法
    /index/  -->类
    建议两者都用

三:模板

四:orm操作
    select * from tb where id>1
    #对应关系
    models.tb.objects.filter(id__gt=1)
    models.tb.objects.filter(id=1)
    model.tb.objects.filter(id__lt=1)

    a.创建类(代码)
    from django.db import models
class UserInfo(models.Model):
    # id列,自增,主键
    # 用户名列,字符串类型,指定长度
    username=models.CharField(max_length=32)
    password=models.CharField(max_length=64)

   b.注册app:
    settings.py:
            INSTALLED_APPS =[
            '''
            'app01',
            ]

    c.执行命令:
    python manage.py makemigrations  生成migrations下的文件
    python manage.py migrate         根据生成的文件创建表和数据库

    d.连接mysql
    django默认使用MySQLdb模块连接mysql,但目前py3.x没有这个模块
    修改为pymsql
    在project下的__init__.py
    import pymysql
    pymysql.install_as_MySQLdb()

    注: base.py将36行注释
        if version < (1, 3, 13):
            raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

        File "C:\Python37\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_query

    query = query.decode(errors='replace')

  AttributeError: 'str' object has no attribute 'decode'

  解决办法:打开此文件把146行的decode修改为encode
    如果已经有migrations文件就直接执行 python manage.py migrate 创建表

        1.根据类(代码)自动创建数据库表
        app下的model.py

        字段:字符串
             数字
             时间
             二进制
             自增(primary_key=True)

        参数:
            null                数据库中字段是否可以为空 null=True
            db_column           数据库中字段的列名  db_column='xx'
            default             数据库中字段的默认值 default='xx'
            primary_key         数据库中字段是否为主键  primary_key=True
            db_index            数据库中字段是否可以建立索引 db_index=True
            unique              数据库中字段是否可以建立唯一索引 unique=True
            unique_for_date     数据库中字段【日期】部分是否可以建立唯一索引  unique_for_date=True
            unique_for_month    数据库中字段【月】部分是否可以建立唯一索引  unique_for_month=True
            unique_for_year     数据库中字段【年】部分是否可以建立唯一索引  unique_for_year=True

            auto_now_add        创建时 自动生成创建时间 auto_now_add=True

            auto_now            更新时 自动生成更改时间 auto_now=True
                                obj=models.UserGroup.objects.filter(uid='1').first() 更新uptime用这种方法
                                obj.caption="DBA"
                                obj.save()

            verbose_name        django  admin中显示的字段名称  verbose_name="姓名"
            blank               django  admin中是否允许用户输入为空  blank=True
            editable            django  admin中是否可以编辑  editable=False
            help_text           django admin中该字段的提示信息 help_text="邮件"

            choices             django admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
                                例:user_type_choice=(
                                                (1,'super user'),
                                                 (2,'normal user'),
                                                (3,'normal normal user'),
                                                 )
                                 user_type_id=models.IntegerField(choices=user_type_choice,default=1)

            error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
                                字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
                                如:{'null': "不能为空.", 'invalid': '格式错误'}

            validators          自定义错误验证(列表类型),从而定制想要的验证规则

        2.根据类(代码)对数据库表中的数据进行各种操作
               一对多:
                    a.外键
                    b.外键字段_id
                    c.外键id创建数据 models.tb.object.create(name='root',user_group_id=1)

                    d.
                        user_list=models.tb.object.all()
                        for row in user_list:
                            row.id
                            row.user_group_id
                            row.user_group.caption 跨表操作

    数据库配置
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'dbname',
    'USER': 'root',
    'PASSWORD': 'xxx',
    'HOST': '',
    'PORT': '',
    }
}

https://www.cnblogs.com/wupeiqi/articles/5237704.html

创建外键
    models.ForeignKey("关联的外表",to_field='外表的主键')
    class UserType(models.Model):
        caption=modules.CharField(max_length=32)
        id   caption
        1  普通用户
        2.VIP用户
        3.游客

    class User(models.Model):
        age=models.IntergerField()
        name=models.CharField(max_length=10)
        user_type=models.ForeignKey('UserType',to_field='id')

        name  age  user_type_id
        mark   19    1
        gasol  31    2
        lebrom  29   3

django笔记(3)-数据库操作的更多相关文章

  1. django 笔记4 数据库操作

    django操作数据库 orm操作 对应关系 models.tb.objects.filter(id__gt=) models.tb.objects.filter(id=) models.tb.obj ...

  2. 关于Django中的数据库操作API之distinct去重的一个误传

    转载自http://www.360doc.com/content/18/0731/18/58287567_774731201.shtml django提供的数据库操作API中的distinct()函数 ...

  3. Django【第5篇】:Django之ORM数据库操作

    django之ORM数据库操作 一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录-------- ...

  4. 【Django】Django model与数据库操作对应关系(转)

    Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ...

  5. django之ORM数据库操作

    一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录----------------->类实例 ...

  6. django基础之数据库操作

    Django 自称是“最适合开发有限期的完美WEB框架”.本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触D ...

  7. Django框架----ORM数据库操作

    一.ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用 ...

  8. 用户增删改查 django生命周期 数据库操作

    一 django生命周期 1 浏览器输入一个请求(get/post)2 响应到django程序中3 执行到url,url通过请求的地址匹配到不同的视图函数4 执行对应的视图函数,此过程可以查询数据库, ...

  9. ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )

    //TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: publ ...

  10. Django简单的数据库操作

    当然,本篇的前提是你已经配置好了相关的环境,这里就不详细介绍. 一. 在settings.py文件中设置数据库属性. 如下: DATABASES = { 'default': { 'ENGINE': ...

随机推荐

  1. [FJOI2016] 建筑师 题解

    显然有一个 \(dp\) 思路.设 \(f_{i,j}\) 表示现在修了 \(i\) 栋楼,从第一栋楼外侧能看到 \(j\) 栋楼的方案数,显然有: \[f_{i,j}=\begin{cases}[i ...

  2. Linux操作文件IO

    Linux操作文件IO 参考自:[北京迅为]嵌入式linux开发指南_v1.1(i.MX6ULL) 文件 IO 是 Linux 系统提供的接口,针对文件和磁盘进行操作,不带缓存机制: 标准 IO 是 ...

  3. 实操Deepseek本地创建知识库

    之前写了一篇本地电脑部署Deepseek的文章,有些朋友问到如何给本地的Deepseek添加知识库,于是我又找时间学习了下.现在把我的实操过程分享一下.这个是本地部署Deepseek的教程:https ...

  4. Python3环境,树莓派使用bluepy与BLE设备通信

    扫描设备 创建一个ScanDelegate 1 class ScanDelegate(DefaultDelegate): 2 def __init__(self): 3 DefaultDelegate ...

  5. Memcached深度剖析:解锁高性能分布式内存缓存的秘密

    引言 在当今快节奏的互联网世界中,应用程序的响应速度往往是用户体验的关键.为了提升性能,减轻数据库的压力,Memcached作为一种高性能的分布式内存对象缓存系统,被广泛应用于加速动态Web应用程序. ...

  6. Kubernetes - [01] 概述

    容器编排工具 一.什么是Kubernetes   K8s,即Kubernetes,是一个开源的容器管理和自动化部署平台,设计用于简化容器化应用程序的部署.扩展和管理过程.它是Google在2014年基 ...

  7. docker - [12] 镜像发布到DockerHub、阿里云

    题记部分 一.镜像发布到 DockerHub 1.地址:https://hub.docker.com/ 注册自己的账号 2.确定这个账号可以登录 3.在服务器上提交镜像 4.登录之后提交镜像即可. [ ...

  8. 使用Express对mysql进行增改查操作(完全代码版本)

    使用Express对mysql进行增改查操作(完全代码版本) 今天发的是Express对mysql进行增删改操作的所有代码,这个代码还没有完善好,都是一些基础的增删改查操作,有一些地方也写上了注释方便 ...

  9. 百万架构师第四十八课:并发编程的原理(三)|JavaGuide

    原文链接 JavaGuide 并发编程的原理 目标: Lock 的使用 AQS 原理分析 Condition CountDownLatch . Semaphore 线程池分析 J.U.C = java ...

  10. 数据库自增 ID 用完了会怎么样?

    前言 数据库中的自增 ID 用完了该怎么办? 这个问题可以分为有主键 & 无主键两种情况回答. 有主键 如果你的表有主键,并且把主键设置为自增. 在 MySQL 中,一般会把主键设置成 int ...