本文共 8623 字,大约阅读时间需要 28 分钟。
本文主要分成四部分:
在终端 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()起一个别名,主要在模板中配合{}
-创建应用 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文件)
-就是一个网页,可以被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%}
(create-retrieve恢复-update-delete)
--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中每一个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
-**通过视图向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
python manage.py createsuperuser Username: Email Address: Password: Password(again)
- 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:在后台显示数据时的排序规则,取值为一个列表,默认是按升序,降序的话则添加'-'
-在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/