博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
后端框架----Django(I)
阅读量:2188 次
发布时间:2019-05-02

本文共 8623 字,大约阅读时间需要 28 分钟。

本文主要分成四部分:

  • django简介:创建项目+路由设置+创建应用
  • templates的使用:变量+标签+过滤器+静态文件处理+模板继承
  • 模型映射–models.py:ORM模型+数据导入及导出+数据库操作(增删改查)
  • 后台管理–admin.py:创建管理员+模型注册+高级设置(后台的可读性+查询+排序)

django简介

创建djando项目

在终端 django-admin startproject xxxx
#newweb   -manage.py (负责执行django中各项操作文件)   -newsweb        --__init__.py(项目初始化文件)        --setting.py(项目的配置文件:应用,模板,数据库,语言)                1.BASE_DIR:项目所在的绝对路径                2.DEBUG:调试模式                    开发过程中,推荐使用True                    上线运行时,必须改为False                3.ALLOWED_HOSTS:设置允许访问本地项目的地址列表;推荐"*",表示任何机器都允许访问当前项目                4.INSTALLED_APPS:指定已安装的应用,如果有自定义应用的话,需要在此注册                5.TEMPLATES:指定模板信息                6.DATABASES:指定数据库的信息                7.LANGUATE_CODE:指定语言,允许修改为zh-Hans                8.TIME_ZONE:指定时去,改为Asis/Shanghai              --urls.py(项目的基础url配置文件)                    1.默认在主文件夹中,包含所有的地址映射                    2.每当一个请求产生后,都会到urls.py中今次系难过地址的匹配,匹配后再找到对应的view去处理        --wsgi.py(配置应用服务器的文件)

注意:

urls.py        -url(regex,views,kwargs=None,name=None)            -regex 正则表达式,匹配请求的url                --urlpatterns=[                  url(r'^fun/(\d+)',fun_views)                ]#一个子组()表示一个参数            -views  url处理的视图函数,通常都是自定义的            -kwargs 字典,用来向views传递参数            -name  字符串,给url()起一个别名,主要在模板中配合{}

django中应用

-创建应用    python manage.py startapp 应用名称    #注意:需要在settings.py中注册
例如:python manage.py startapp index  --index      --migrations(存放数据库日志文件,是一个django与数据库交互的中间文件)           --__init__.py       --__init__.py(应用的初始化操作文件)       --admin.py(应用的后台管理配置文件)       --apps.py(应用的属性设置文件,不需要改动)       --models.py(models模型文件)       --tests.py(测试模块,通常不用)       --views.py(定义视图的py文件)

模板tamplate使用

-就是一个网页,可以被views响应给用户

-模板的设置

--BACKEND:指定模板的搜索引擎,不用改动 --DIRS:指定模板所存在的目录       如果DIRS中为空的话,那么django会自动索引每个应用中的templates的文件夹作为模板管理目录       --推荐:DIRS保持为空              在每个应用中,创建一个templatas的文件夹 --APP_DIRS    True:首先从DIRS中指定的文件夹中查找模板,如果没找到指定模板的话,再搜索templates目录

-模板的加载方式

1.使用loader获取模板,通过HttpResponse进行响应   from django.template import loader   def xx(request):       t=loader.get_template('show.html')       html=r.render()       return HttpResponse(html)   2.使用render直接加载         return render(request,'show.html',{})

模板语法–变量

-允许将后端的数据传递给模板  --变量的数据类型:数字,字符串,列表,元组,字典,函数,对象  --如何传递变量到模板中        1.render            dic={                '变量1":'值1',                '变量2':'值2',                'age':20,                }            return render(request,'xxx.html',dic)        2.loader            dic=dic={                '变量1":'值1',                '变量2':'值2',                'age':20,                }            t=loader.get_template('xxx.html')            html=t.render(**dic)            return HttpResponse(html)    在模板中,获取变量的值:{
{变量名}} #{{age}}

模板语法–标签

允许嵌套一些服务器端的逻辑运算到模板中    {%...%}-常用标签    -{%if条件%}...{%endif%}            接受:not and or(and与or不能同时出现)    -{%if条件%}..{%else%}...{%endif%}    -{%for 变量in列表|元组|字典%}     {%endfor%}         允许使用的内置变量(免声明)        forloop.counter:记录循环的次数

模板语法–过滤器

-在显示变量之前,允许对数据进行筛选或改变 -{
{var|过滤器}} -常见过滤器 1.{
{var|upper}} 将var的数据变成大写 2.{
{var|lower}} 将var的数据变为小写 3.{
{var|floatformat:n}} 将var四舍五入到n位小数

模板语法–静态文件的处理

-模板中所用到的css,js,images等一些资源文件都是静态文件-配置路径:需要在settings.py中设置静态文件的访问路径和存储路径    1.STATIC_URL:指定静态资源的访问路径        STATIC_URL='/static/'    2.STATICFILES_DIRS:指定在开发阶段所有静态文件所在的根目录        STATICFILES_DIRS=(BASE_DIR,'static')-访问静态资源(两种方式)    -    -使用{%static%}访问静态资源        1.模板的最顶层增加            {%load static%}        2.使用静态资源文件时            注意:需要在应用文件夹中建立static子文件夹

模板语法–继承

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

模型–models

  • 模型,就是根据数据库中数据表的结构而创建出来的class
  • 数据库中每一张表到编程语言中就是一个class
  • 数据库表中的一个字段(列)可以被构建成class中一个成员变量(属性)
  • 并且在模型中,完成对数据的增删改查CRUD
  • (create-retrieve恢复-update-delete)

    ORM模型

    --object relational mapping        对象关系映射    --三大特征:        1.数据表到类(class)的映射           允许将表自动生成一个类           也允许将一个类自动生成一个表        2.数据类型的映射            允许将表中字段的类型自动生成编程语言中对应的数据    也允许将编程语言中数据类型生成数据库中对应的字段        3.关系映射        数据库中表的关联关系:            一对一,一对多,多对多        将表中的关联关系也映射到编程语言的class中,通过创建对象的关系来完成映射    --ORM的优点    1.提高开发效率,能够自动完成实体类到数据表的映射,可以省略庞大的数据访问层    2.不用SQL编码,就能完成对局的CRUD操作

    数据库操作

    --**创建数据库(支持中文)**        create database webdb default charset utf8 collate utf8_general_ci; --**settings.py中配置数据库信息**        DATABASES={            'default':'default': {                    'ENGINE': 'django.db.backends.mysql',#引擎                    'NAME': 'webdb',#要连接的数据库名                    'USER': 'root',#用户名                    'PASSWORD': '123456',                    'HOST': 'localhost',#连接的主机号                    'PORT': '3306',                }        }注意:    使用mysql库,需要在主目录的文件夹下的__init__.py中添加    import pymysql    pymysql.install_as_MySQLdb()--**数据库的同步**    ---将每个应用下的models.py文件映射成一个数据库日志文件,并存放在migrations文件夹中    python manage.py makemigrations    ---将每个应用下的migrations文件夹中日志同步到数据库中    python manage.py migrate

models.py

-models中每一个class都称为模型类或者实体类-models中每个实体类,必须继承自models.Modeleg:    class Publish(models.Model):       name=models.CharField(max_length=30)--数据字段(Field Types)    https://docs.djangoproject.com/en/2.0/ref/models/fields/--字段选项 (Field Options)    -null 是否允许为空        name=models.CharField(max_length=30,null=True)    -default 为该列设置默认值        name=models.CharField(max_length=30,default='匿名')

数据的导入和导出

1.版本切换    python manage.py migrate 应用名称 版本号    #python manage.py migrate  index 00022.数据库的导出(在终端)    --mysqldump -u root -p 数据库名>文件.sql          #导出所有的表结构以及数据    -mysqldump -u root -p -t 数据库名 >文件.sql    #导出所有表结构,不导出数据3.数据库导入        mysql -u root -p 数据库名 < 文件.sql          #要求数据库必须存在4.通过数据库自动导出models         python  manage.py inspectdb > 文件.py

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

-**通过视图向DB中增加数据**    1.Entry.objects.create(属性=值,属性=值)    #注意:view函数需要 return xx    2.创建一个实体对象,并通过save()方法完成增加         obj=Entry(属性=值,属性=值)     obj.save()    3.通过字典创建实体对象,再调用save()       dic={            'name':'xxx',            'age':30,            'email':'xx'       }        obj=Author(**dic)        obj.save()-**查询操作**    所有的查询都要在Entry.objects的基础上玩车个完成    1.基本查询操作        Entry.objects.all() #返回QuerySet    2.常见的查询操作        -Entry.objects.all()           #相当于select * from ..        -Entry.objects.all().values('name')           #相当于 select name from ..        -Entry.objects.all().values('name','age')   #相当于 select name,age from ...        -Entry.objects.get(id=1)        #相当于 select * from ... where id=1        只能查询一条记录,如果查询多条记录的话,则报错        -Entry.objects.filter(id=1,name='xx')        #相当于 select * from entry where id=1 and name='xxx';        根据自定义条件查询结果集,可以是一个,也可以是多个;多个条件之间用,隔开-**修改操作**    1.修改单个对象        -通过get()得到要修改的实体对象        -通过实体对象修改属性值        -再通过实体对象的save()函数,实现保存        eg:          auth=Author.objects.get(id=1)          auth.name="小胡子"          auth.age=27          auth.email='sun@163.com'          auth.save()    2.批量修改(修改查询结果集的值)        Author.objects.all().update(属性=值...)-**删除操作**        1.删除单个对象            obj=Author.objects.get(id=1)            obj.delete()        2.批量删除            Author.objects.filter(age_lt=20).delete()-**F()操作和Q()操作**        1. F('列名')        -用于在执行中获取某列的值         from django.db.models import F         Author.objects.all().update(age=F('age')+10)         2.Q()         -支持特殊操作符&(and),|(or),~(not)         from django.db.models import Q         Author.objects.filter(Q(id_exact=1)|Q(age=35),name='小胡子') -原生的数据库操作---自定义增删改查    1.查询--raw()函数        Entry.objects.raw(sql)    2.增删改       def sql(request):            with connection.cursor() as cursor:                  sql='xxxx"                  cursor.excute(sql)            return render(..)    注意:在views.py中对模型进行增删改查都需要先获取实类 Entry.objects

后台管理-Admin

1.创建后台管理员

python manage.py createsuperuser   Username:   Email Address:   Password:   Password(again)

2.基本管理

- http://localhost:8000/admin    -在应用中的admin.py中注册要管理的数据-注册Model  from  models import *  admin.site.register(Entry)-修改models.py 处理显示内容(后台默认可读性不高,在各个class中增加函数)def __str__(self):   return self.name-通过内部类Meta实现展现的属性    允许为每个model类设置内部类Meta来设置起展现形式    class Author(models.Model):    ...    class Meta:        1.db_table:指定该实体对应到表的名称2.verbose_name:定义该实体类在admin中显示的名称(单数形式)3.verbose_name_plural:效果同上,是复数形式4.ordering:在后台显示数据时的排序规则,取值为一个列表,默认是按升序,降序的话则添加'-'

3.高级管理

-在admin.py中创建管理类,实现高级管理功能--定义EntryAdmin类,继承admin.ModelAdminclass AuthorAdmin(admin.ModelAdmin):pass   --注册高级管理类    admin.site.register(Author,AuthorAdmin)--允许在EntryAdmin增加的属性   list_display:在显示实体信息的页面上,都有哪些字段   可以在官网查询更多的属性:   https://docs.djangoproject.com/en/2.0/ref/contrib/admin/

转载地址:http://ldwub.baihongyu.com/

你可能感兴趣的文章
深入理解JVM虚拟机4:Java class介绍与解析实践
查看>>
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>
深入理解JVM虚拟机6:深入理解JVM类加载机制
查看>>
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机11:Java内存异常原理与实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析3:Spring IOC容器的加载过程
查看>>
Spring源码剖析4:懒加载的单例Bean获取过程分析
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
Spring源码剖析7:AOP实现原理详解
查看>>
Spring源码剖析8:Spring事务概述
查看>>
Spring源码剖析9:Spring事务源码剖析
查看>>
重新学习Mysql数据库1:无废话MySQL入门
查看>>
探索Redis设计与实现2:Redis内部数据结构详解——dict
查看>>