Django基础操作

Django框架

1、什么是Django
    是一个开源框架,2005年发布,采用Python语言开发的。早期Django是做新闻网站的。提供了非常强大的后台管理系统,采用
的是MTV的框架模式
2、Django的优缺点
    1、优点
        1、开源框架,有完美的文档支持
        2、解决方案比较完整,内部功能也比较多
        3、提供完整的路由系统,优雅的URL解析方式
        4、自助式的后台管理
    2、缺点
        目标:高内聚,低耦合
        耦合度偏高
3、Django的安装
    1、Linux 中的安装
        1、查看已安装的django
            1、进入到虚拟环境中
            2、进入到python的交互模式
            3、在交互模式中输入
                1、import django
                2、django.VERSION
        2、安装
            1、在线安装 - 使用 pip
                1、终端中输入 
                    pip install django
                    (安装django的最高版本)

                    pip install django==1.11.8

                    虚拟环境中不用 sudo
            2、离线安装
                1、下载所需要的django包
                    https://www.djangoproject.com/
                2、在 Linux 中解压 django
                    tar -xvf Django-1.11.8.tar.gz
                3、进入到Django文件夹中
                4、安装
                    python setup.py install
    2、Windows 中的安装
        1、在线安装
            控制台中 
            pip3 install django==1.11.8
        2、离线安装
            1、下载django安装包
            2、解压django包
            3、进入到django包中
                python setup.py install

使用Django

    1、创建Django项目
        直接使用 django-admin 去创建Django项目
        1、找到项目文件夹(自定义)
        2、使用 django-admin 指令
            django-admin startproject 项目名称
    2、启动Django项目
        1、进入到项目文件夹中
        2、通过 manage.py 启动项目
            1、
                python manage.py runserver
                或
                ./manage.py runserver
                只能在本机访问
                http://localhost:8000
                http://127.0.0.1:8000
            2、
                ./manage.py runserver 0.0.0.0:8000
                允许在局域网内访问,可以通过IP地址访问

                ex:
                    1、启动服务
                        ./manage.py runserver 0.0.0.0:8000
                    2、查看 虚拟机 IP地址
                        ifconfig
                    3、在windows中,打开chrome浏览器,通过IP地址访问django项目

Django结构介绍

    1、manage.py 
        负责执行django中的各项操作的文件
        命令脚本文件
        如:
            1、启动服务
            2、创建应用
            3、创建管理员、用户
            ... ...
    2、主文件夹(名称与项目名称相同)
        存放项目的最基础的配置文件
        1、__init__.py
            项目初始化文件,每当服务器启动的时候,会自动执行
            如果有自定义的初始化操作,需要放在该文件中
        2、urls.py
            项目的基础url(路由)配置文件
            路由:去哪找执行的程序
        3、wsgi.py
            配置应用服务器的文件,暂时不用
        4、settings.py(重要)
            项目的主设置文件:应用,模板,数据库,语言,时区,... ...
            1、BASE_DIR :项目所在的绝对路径
            2、DEBUG :调试模式
                开发过程中,推荐使用 True
                上线运行时,必须改为 False
            3、ALLOWED_HOSTS
                设置允许访问本地项目的地址列表,如果不设置的话,只有本机(localhost / 127.0.0.1访问)。推荐些 '*' ,表示任
何机器都允许访问当前项目
            4、INSTALLED_APPS
                指定已安装的应用,如果有自定义应用的话,需要在此注册
            5、MIDDLEWARE :注册中间件
            6、ROOT_URLCONF :指定项目的基础路由配置文件
            7、TEMPLATES :指定模板的信息
            8、DATABASES :指定数据库的信息
            9、LANGUATE_CODE : 指定语言,允许修改为 zh-Hans
            10、TIME_ZONE :指定时区,建议改为 Asia/Shanghai

settings的加载流程

    1、先加载global_settings
        位于:虚拟环境/lib/python3.5/site-packages/django/conf
    2、再加载项目中的settings
        注意:如果 global_settings中的内容与项目settings中的内容冲突的话,优先使用项目的settings中的内容

初识 django-admin 和 manage.py

    1、终端中直接输入 django-admin
        check
        compilemessages
        createcachetable
        dbshell
        diffsettings
        dumpdata
        flush
        inspectdb
        loaddata
        makemessages
        makemigrations
        migrate
        runserver
        sendtestemail
        shell
        showmigrations
        sqlflush
        sqlmigrate
        sqlsequencereset
        squashmigrations
        startapp
        startproject #创建项目
        test
        testserver
    2、进入到项目主文件夹,输入./manage.py
        [auth]
                changepassword #修改密码
                createsuperuser #创建超级用户

        [contenttypes]
                remove_stale_contenttypes

        [django]
                check
                compilemessages
                createcachetable
                dbshell #进入到Django数据shell交互模式
                diffsettings
                dumpdata
                flush
                inspectdb #将数据表直接导出为Models
                loaddata
                makemessages
                makemigrations #创建数据库日志文件,记录Models的改动
                migrate #将数据库日志文件同步到数据库中
                sendtestemail
                shell
                showmigrations
                sqlflush
                sqlmigrate
                sqlsequencereset
                squashmigrations
                startapp #创建应用
                startproject
                test
                testserver

        [sessions]
                clearsessions

        [staticfiles]
                collectstatic
                findstatic
                runserver #启动服务

URL的使用

    1、urls.py
        默认在主文件夹中,包含所有的地址映射。
        每当一个请求产生后,都会到urls.py中进行地址的匹配,匹配上后再找到对应的处理程序(View视图)去执行
    2、测试
        1、项目主文件夹中,创建 views.py
            作用:包含所有定义好的视图(处理程序)
            views.py :
                from django.http import HttpResponse

                def fun_views(request):
                    return HttpResponse('Hello Django')
        2、在 urls.py 中追加
            from .views import *
            urlpatterns = [
                url(r'^admin/',admin.site.urls),
                url(r'^fun/$',fun_views),
            ]
    3、url 函数
        url函数的语法
        url(regex,views,kwargs=None,name=None)
            1、regex
                正则表达式,匹配请求的 url
            2、views
                URL处理的视图函数,通常都是自定义的
            3、kwargs
                字典,用来向views传参的
            4、name
                字符串,给url()起一个别名,主要在模板中配合{%url%}一起使用
    4、url 向 view 传参
        1、使用正则表达式传参
            使用正则表达式的子组传参,使用()

            urlpatterns = [
                #访问路径必须是 fun 
                url(r'^fun/$',fun_views),
                #访问路径必须是 fun
                url(r'^(fun)/$',fun_views),

                url(r'^fun/(\d+)',fun_arg1_views),
            ]
            注意:
                1、在 url() 中,一个子组()表示一个参数
                2、在views.py中,对应的处理函数要根据url()中子组的个数,相应的定义参数,定义的参数要位于 request之后

        2、使用url()第三个参数,字典传参
            urlpatterns = [
                url(r'^showname/$',show_views,{'name':'zsf','age':'25'}),
            ]

            views.py
            def show_views(request,name,age):
                resp = HttpResponse(name+":"+age)
                return resp
            注意:
                1、视图处理函数中,必须声明参数
                2、参数的名称 和 位置 必须要与字典中的名称和位置保持一致

Django 中的应用

1、什么是应用
    应用是网站中的一个独立的模块,包含独立的显示信息。
    在项目主文件夹中一般不处理其他的请求,主要就做初始化设置 以及 地址的分发
    实际操作中,会将请求,交给不同的应用去处理
2、创建应用
    1、命令
        ./manage.py startapp 应用名称
        ex:
            创建一个应用,名称为 index
    2、在 settings.py中注册应用
        在 INSTALLED_APPS 中追加应用名称即可
        INSTALLED_APPS = [
            'django.contrib.admin',
            ... ...,
            'index',
        ]
    3、应用的结构组成
        1、migrations 目录
            存放数据库日志文件,是一个django与数据库交互的中间文件
        2、__init__.py
            应用的初始化操作文件
        3、admin.py
            应用的后台管理配置文件
        4、apps.py应用的属性设置文件,不需改动
        5、models.py
            Models模型文件
        6、tests.py
            测试模块,通常不用
        7、views.py
            定义视图的py文件

Django 模板(Template)

1、什么是模板
    就是一个网页,可以被view响应给用户
    目的是为了解决复杂的显示问题
2、模板的设置
    1、BACKEND:指定模板的搜索引擎,不用改动
    2、DIRS:指定模板所存放的目录
        DIRS=['index.temp','music.temp']
        但是,如果DIRS中为空的话,那么django会自动所有每个应用中的 templates 的文件夹作为模板管理目录
        推荐:
            1、DIRS 保持为空
            2、在每个应用中,创建一个 templates 的文件夹
    3、APP_DIRS
        True:首先从DIRS中指定的文件夹中查找模板,如果没找到指定模板的话,则再搜索templates目录
3、模板的加载方式
    1、使用 loader 获取模板,通过HttpResponse进行响应
        from django.template import loader

        def xxx(request):
            t=loader.get_template('show.html')
            html=t.render({})
            return HttpResponse(html)

    2、使用 render 直接加载
        return render(request,'模板名称',{})

4、url() 的name参数
    urlpatterns = [
        url(regex,views,kwargs=None,name=None)
    ]

    name : 定义当前url的别名,允许在Template中使用该别名来找到对应的 url

    url(regex,views,name=None,name='别名')

    在Django模板中使用 name 实现连接
    {% url 'name值'%}


5、模板的语法
    1、变量
        作用:允许将后端的数据传递给模板(html),在模板中,会根据变量的实际值进行显示

        在Django中允许传递给模板作为变量的数据类型
            数字,字符串,列表,元组,字典,函数,对象
        如何传递变量到模板中
            1、render
                dic = {
                    '变量1':'值1',
                    '变量2':'值2',
                }
                return render(request,'xx.html',dic)
            2、loader
                dic = {
                    '变量1':'值1',
                    '变量2':'值2',
                }
                t = loader.get_template('xx.html')
                html=t.render(dic)
                return HttpResponse(html)

        在模板中,获取变量的值:
            {{变量名}}
    2、标签
        1、什么是标签
            允许嵌套一些服务器端的逻辑运算到模板中。
        2、语法
            {% ... %}
        3、常用标签
            1、{%if 条件%} ... {%endif%}
                接受 :not , and ,or
                但是 :and 和 or 不能同时出现
                以下内容当成False处理:
                    空[]
                    空()
                    空{}
                    数字:0
                    空字符串
                    特殊对象:None
            2、{%if 条件%} ... {%else%} ... {%endif%}
            3、
                {%ifequal 值1 值2%} ...{%endifequal%}

                {%ifequal 值1 值2%} . {%else%} . {%endifequal%}
            4、
                {%for 变量 in 列表|元组|字典%}
                {%endfor%}
                允许使用的内置变量(免声明):
                    forloop
                    1、forloop.counter : 记录循环的次数
                    2、forloop.counter0: 同上,但从0开始
                    3、forloop.revcounter:记录未被遍历的数量
                    4、forloop.revcounter0:同上,从0开始
                    5、forloop.first : 布尔值,标记是否为第一个项目
                    6、forloop.last : 布尔值,标记是否为最后一个项目
    3、过滤器
        1、作用
            在显示变量之前,允许对数据进行筛选或改变
        2、过滤器的语法
            {{var|过滤器}}
        3、常用过滤器
            1、{{var|upper}}
                将var的数据变为大写
            2、{{var|lower}}
                将var的数据变为小写
            3、{{var|add:num}}
            4、{{var|floatformat:n}}
                将var四舍五入到 n 位小数
    4、静态文件的处理
        1、什么是静态文件
            模板中所用到的css,js,image,等一些资源文件都是静态文件
        2、Django中静态文件的处理
            需要在 settings.py中设置静态文件的访问路径 和 存储路径
            1、STATIC_URL
                指定静态资源的访问路径
                STATIC_URL='/static/'
            2、STATICFILES_DIRS
                指定在开发阶段所有静态文件所在的根目录
                STATICFILES_DIRS=(BASE_DIR,'static')
        3、访问静态资源
            1、<img src="/static/images/huiyuan.jpg">
            2、使用 {%static %}访问静态资源
                1、模板的最顶层增加  
                    {%load static%}
                2、使用静态资源文件时
                    <img src="{%static 'images/huiyuan.jpg' %}">

模板

模板的继承
    1、什么是模板的继承
        当多个模板(网页)具备大部分相同的内容时,就可以使用继承的方式,将相同的内容继承过来,再增加/修改属于自己的内
容即可
    2、模板继承的语法
        1、在父模板中
            增加{%block 名称%}...{%endblock%}标签
        2、在子模板中
            1、在最顶层第一句话增加 :
                {%extends '父模板的名称'%}
            2、增加 block 标记,编写属于自己的内容
                {%block 名称%}
                    属于子模板中自己的内容
                {%endblock%}

模型 - Models

1、什么是模型
    模型,就是根据数据库中数据表的结构而创建出来的class。数据库中的每一张表到编程语言中就是一个class。数据库表中的一
个字段(列)可以被构建成class中的一个成员变量(属性)。并且在模型中,完成对数据的CRUD操作
        C:Create
        R:Retrieve
        U:Update
        D:Delete
2、创建 和 使用模型 - ORM
    1、什么是ORM
        ORM:Object Relational Mapping
        简称:ORM,O/RM,O/R Mapping
        中文为:对象关系映射
        三大特征:
            1、数据表 到 类(class) 的映射
                允许将表自动生成 一个类
                也允许将一个类自动生成一个表
            2、数据类型的映射
                允许将表中字段的类型自动生成到编程语言中对应的数据类型
                也允许将编程语言中的数据类型生成数据库中对应的字段类型
            3、关系映射
                数据库中表的关联关系:
                    一对一,一对多(多对一),多对多

                将表中的关联关系也映射到编程语言的class中,通过创建对象的关系来完成映射
    2、ORM的优点
        1、提高了开发效率,能够自动完成实体类到数据表的映射,可以省略庞大的数据访问层
        2、不用SQL编码,就能完成对数据的CRUD操作
    3、创建 和 配置数据库
        1、创建数据库(支持中文)
            create database webdb default charset utf8 collate utf8_general_ci
        2、Django中数据库的配置
            settings.py 中配置数据库的信息
            DATABASES = {
                'default':{
                    'ENGINE':'...',
                    'NAME':'',
                }
            }

            1、ENGINE :引擎
                django.db.backends.mysql
            2、NAME:要连接到的数据库的名称
            3、USER:用户名称,通常为 root
            4、PASSWORD:密码,123456
            5、HOST:连接的主机,本机的话 localhost / 127.0.0.1 / 不写
            6、PORT:端口,3306
    4、数据库的同步操作
        1、./manage.py makemigrations
            作用:将每个应用下的models.py文件映射成一个数据库日志文件,并存放在 migrations 文件夹中
        2、./manage.py migrate
            作用:将每个应用下的migrations文件夹中的日志文件同步到 数据库中
    5、编写Models
        1、注意
            1、Models中的每个class都称之为 模型类(Model) 或 实体类(Entry)
            2、Models中的每个实体类,必须继承自models.Model
        2、ex
            models.py

            from django.db import models
            class Publisher(models.Model):
                name = models.CharField(max_length=30)
                address = models.CharField(max_length=50)
                city = models.CharFiled(max_length=20)
                country = models.CharField(max_length=20)
                website = models.URLField()
    6、Django提供的数据字段 以及 字段选项
        1、数据字段(Field Types)
            1、BooleanField()
            2、CharField()
            3、DateField()
            4、DateTimeField()
            5、FloatField()
            6、FileField()
            7、EmailField()
            8、IntegerField()
            9、ImageField()
            10、URLField()
            11、DecimalField()
        2、字段选项(Field Options)
            1、null :是否允许为空
                name=models.CharField(max_length=30,null=True)
            2、default :为该列设置默认值
                name=models.CharField(max_length=30,default='匿名')

    7、数据的导入和导出(数据迁移) 以及 版本切换
        1、版本切换
            ./manage.py migrate 应用名称 版本号
            ex:
                ./manage.py migrate index 0001
        2、数据库的导出
            1、mysqldump -u root -p 数据库名 > 文件.sql
                (导出所有的表结构 以及 数据)
            2、mysqldump -u root -p -d 数据库名 > 文件.sql
                (导出所有表结构,不导出数据)
        3、数据库的导入
            mysql -u root -p 数据库名 < 文件.sql
            (要求数据库必须存在)
        4、通过数据库自动导出Models
            ./manage.py inspectdb > 文件.py

实体:

数据表中的一行记录,就是一个实体
实体完整性:确保每张表中的数据不能有重复的。数据表中的主键,是实现实体完整性的方式之一

模型的数据库操作方法(CRUD)

1、通过视图向DB中增加数据
    1、Entry.objects.create(属性=值,属性=值)
    2、创建一个实体对象,并通过 save() 方法完成增加
        obj = Entry(属性=值,属性=值)
        obj.save()
    3、通过字典创建实体对象,再调用 save()
        dic = {
            'name':'xx',
            'age':33,
            'email':''
        }
        obj = Author(**dic)
        obj.save()
2、查询操作(重难点)
    所有的查询都要在Entry.objects的基础上完成
    1、基本查询操作
        语法:all()
        用法:Entry.objects.all()
        返回:QuerySet
    2、查询接口
        1、all()
            Entry.objects.all()
            相当于:select * from ...
        2、all().values('列名')
            Entry.objects.all().values('name')
            相当于:select name from ...
            作用:查询所有记录的某一列的值
        3、all().values('列1','列2')
            Entry.objects.all().values('name','age')
            相当于:select name,age from ...
        4、get()
            只查找一条记录时使用
            也只能返回一条记录
            如果查询返回多条记录的话,则报错
            Entry.objects.get(id=4)
            相当于:select * from ... where id=4
        5、exclude()
            作用:对给定条件取反
            Entry.objects.exclude(id=3)
            select * from .... where not id=3

            Entry.objects.exclude(id=3,age=35)
            select * from .... where not (id=3 and age=35)
        6、order_by()
            Entry.objects.order_by('列名1','-列名2')
            指定按照字段们进行排序,如果是多个字段,中间,隔开。默认是按照升序排序,需要降序的话,只需要在列名前
加‘-’即可
        7、filter()
            根据自定义条件查询结果集,可以是一个,也可以是多个,多个的话,条件用 , 隔开。
            如果是多个条件的话,其内部是使用 AND 来进行条件连接的
            1、使用Entry的属性来作为filter()的条件
                ex:
                    1、Author.objects.filter(id=1)
                        select * from author where id=1
                    2、Author.objects.filter(name='王宝强')
                    3、Author.objects.filter(id=1,name='王宝强')
                        select * from auther where id=1 and name='王宝强'
            2、使用 Filed Lookups (查询谓词)
                1、__exact
                    作用:等值判断
                    Author.objects.filter(id__exact=1)
                    SQL:
                        select * from auther where id=1
                2、子查询
                    inner=Author.objects.filter(name__exact='贾乃亮').values('age')
                    authors=Author.objects.filter(age__gt=inner)

修改操作

    1、修改单个对象
        1、通过get()得到要修改的实体对象
        2、通过实体对象修改属性值
        3、再通过实体对象的save()函数,实现保存

        auth=Author.objects.get(id=1)
        auth.name='宝强.王'
        auth.age=45
        auth.save()
    2、批量修改(修改查询结果集的值)
        调用 update() 函数即可
        Author.objects.all().update(属性=值,...)

删除操作

    1、删除单个对象
        obj=Author.objects.get(id=1)
        obj.delete()
    2、批量删除
        Author.objects.filter(age__lt=50).delete()

F()操作 和 Q()操作

    1、F()操作
        update author set age=age+10
        Author.objects.all().update(age=age+10)

        作用:用于在执行中获取某列的值
        语法:F('列名')

        from django.db.models import F
        Author.objects.all().update(age=F('age')+10)

    2、Q()操作
        AND:Author.objects.filter(id=1,age=35)

        from django.db.models import Q
        Author.objects.filter(
            Q(id__exact=1)|Q(age=35),name='王'
        )

        select * from author where id=1 or age=35 and name='王'

原生的数据库操作方法

    1、查询
        函数:raw()
        语法:Entry.objects.raw(sql)
    2、增删改
        def sql(request):
            with connection.cursor() as cursor:
                sql='delete from index_author;'
                cursor.execute(sql)
                return render(... ...)

静态文件css,js images的处理

    2.在Django中的静态文件的处理
            在 settings.py中设置有关静态文件的信息:
            1.设置静态文件的访问路径
                在浏览器中通过哪个地址能够找到静态文件
                STATIC_URL='/static/'
                如果访问路径是 http://localhost:8000/static/..一律都按照静态文件的方式去查找

            2.设置静态文件的存储路径
                指定静态文件要保存在服务器上哪个目录处
                STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)
                静态文件目录的存放位置:
                    1.在项目的根目录处创建一个 static 目录,用于保存静态文件们
                    2.每个应用中也可以创建一个 static 目录,用于保存静态文件们
        3.访问静态文件
            1.直接使用静态文件访问路径进行访问
                http://localhost:8000/static/...
                ex:
                    <img src="http://localhost:8000/static/images/b04.jpg">
                    <img src="/static/images/b04.jpg">
            2.使用 {% static %} 访问静态资源
                1.在使用之前需要通过{% load static %} 加载 static
                2.使用静态资源时
                    <img src="{% static 'images/b04.jpg' %}">

转载于:https://www.cnblogs.com/-hjj/p/9942945.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中进行数据库操作需要进行以下几个步骤: 1. 在settings.py文件中配置数据库连接信息。可以使用sqlite3或者MySQL等不同的数据库引擎。例如,如果要连接MySQL数据库,需要将DATABASES中的ENGINE设置为'django.db.backends.mysql',并指定HOST、PORT、NAME、USER和PASSWORD等相关参数。 2. 在views.py文件中编写对数据库操作代码。可以使用Django的ORM(对象关系映射)来进行数据库操作。例如,可以使用models.UserInfo.objects.create()创建一个新的数据库对象,并指定相应的属性值。 3. 在视图函数中处理用户的请求,根据请求的方法(GET或POST)执行相应的数据库操作。例如,可以在POST请求中通过request.POST获取用户提交的表单数据,并使用models.UserInfo.objects.create()将数据写入数据库。 4. 在模板中展示数据库中的数据。可以通过查询数据库获取相应的数据,并将其传递给模板进行展示。例如,可以使用models.UserInfo.objects.all()获取所有的数据库对象,并将其传递给模板进行渲染。 需要注意的是,在进行数据库操作之前,需要确保数据库已经创建并正确配置了相关的权限和表结构。可以在settings.py文件中的DATABASES配置中指定数据库名称、用户名和密码等信息。 总结起来,进行Django数据库操作的主要步骤包括配置数据库连接信息、编写数据库操作代码、处理用户请求以及在模板中展示数据。123 #### 引用[.reference_title] - *1* [Django数据库操作](https://blog.csdn.net/m0_65883616/article/details/125736469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* *3* [django基础数据库操作](https://blog.csdn.net/inexaustible/article/details/107981925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值