Django简单入门

创建虚拟环境

项目差点被搞崩了。还是得要有虚拟环境
pycharm如何创建虚拟环境

下载Django

pip install django

创建项目

1、在合适位置创建文件夹
2、在终端进入文件夹(小tips:如果cd不成功,再输入—>d:)
3、输入—> django-admin startproject 项目名
4、执行成功后,会在新创建的文件夹下面出现一个以项目名为名称的文件夹
5、查看目录结构–>tree . /F

在这里插入图片描述

目录层级说明:
manage.py:一个命令行工具,可以是我们用多种方式对Django醒目进行交互
init.py:一个空文件,他告诉python这个目录应该被看作一个python包
settings.py:配置文件
urls.py:项目的URL声明
wsgi.py:项目与WSGI兼容的Web服务器入口

基本操作

设计表结构
启动数据库–>net start mysql mysql -u root -p(两个命令,第一个要是管理员)

配置数据库:注意:Django默认使用SQLite所以要进行配置
1、在__init__.py中加入两行代码

import pymysql
pymysql.install_as_MySQLdb()

2、进入settings.py找到DATBASES(76行)
将DATABASES进行修改
在这里插入图片描述在这里插入图片描述

创建应用

在一个项目中可以创建多个应用,每个应用进行一种业务处理

打开黑屏终端,进入创建文件夹下的project目录(第一个project)
输入–>python manage.py startapp myApp(应用名称)
在这里插入图片描述在这里插入图片描述

目录说明:
1、admin.py 站点配置
2、model.py 模型
3、views.py 视图

激活应用

将应用配置到项目当中

1、在settings.py中找到INSTALLED_APPS选项中,添加’myApp’(应用名称)
在这里插入图片描述

定义模型

有一个表,就有一个模型。在刚生成的应用中myApp中的model.py进行模型定义。不用定义主键在生成时自动添加
在这里插入图片描述

生成数据表

1、生成迁移文件–>python manage.py makemigrations
在这里插入图片描述

2、执行迁移–>python manage.py migrate
在这里插入图片描述
3、此时打开数据库
在这里插入图片描述

如果报错移步No changes detected
mysql基本操作

测试数据操作

1、进入python shell -->python manage.py shell
2、然后引入一些库
from myApp.models import Grades,Students
from django.utils import timezone
from datetime import *
3、查询所有数据–>类名.object.all()
4、添加数据:创建一个模型类的对象实例,并且保存

在这里插入图片描述

5、查看数据:类名.objects.get(pk=2) 类名.objects.all()
6、修改数据:对象名.属性名= 对象名.save()
7、删除数据:对象名.delete() 不用存,直接删除
8、关联数据:
定义(对象名.属性=关联的对象名):stu.sgrade=grade1
查询(被关联的对象名.关联的对象名_set.all()):grade1.student_set.all()
添加(被关联的对象名.关联的对象名):grade1.student_set.create(sname=u’ ‘,sgender=True,scontend=u’ ',sage=45) 在student表里面添加了一个班级是grade1的学生

启动服务器

1、格式
python manage.py runserver ip:port
ip可以不写,默认本机ip port:端口号默认8000
2、说明:python写的轻量级的web服务器,仅仅在开发测试中使用

在这里插入图片描述

从http://127.0.0.1:8000/进入服务器

admin站点管理

概述:

内容发布:负责添加、修改删除内容
公告访问:

配置Admin应用

settings.py文件中INSTALLED_APPS中添加’django.contrib.admin’

创建管理员用户

1、python manage.py createsuperuser
2、依次输入用户名、邮箱、密码(root 邮箱可以随便填 root)
3、http://127.0.0.1:8000/admin可以进入管理员界面
4、界面汉化
settings.py中找到,对第一、二行进行修改
在这里插入图片描述在这里插入图片描述

管理数据表

1、修改admin.py,引入创建的表
在这里插入图片描述

2、刷新站点管理,可以发现多出两张表
在这里插入图片描述

自定义管理页面
1、列表页属性:
list_display=[‘pk’,‘gname’,’'ggirlnum,‘gboynum’,‘isDelete’] 用来显示字段
list_filter=[‘gname’] 以哪个字段进行过滤筛选
search_fields=[‘gname’] 按照什么条件进行搜索
list_per_page=5 分页,每5条进行分页

2、添加、修改页属性
fields=[‘ggirlnum’,‘gboynum’,‘gname’,‘isDelete’] 规定属性的先后顺序
fieldsets=
[ (“num”, { “fields” : [“ggirlnum”,“gboynum”] } ),( “base” , {“fields”:[‘gname’,‘isDelete’,‘gdate’ ] } ) ]
给属性分组
注意这两个属性不能同时使用

3、修改默认关联数据
在models.py添加函数
在这里插入图片描述>效果就是:学生在选择班级的时候可以选择自己定义的班级名称,而不是系统自动分配的名称
在这里插入图片描述添加判断函数
在这里插入图片描述
效果是将bool类型转换成其他内容

4、关联对象
需求:在创建一个班级时可以直接添加几个学生
在models.py中进行添加函数,此函数可以在两个关联的表中的其中之一添加另一个表的数据。(一个班级可以有很多学生,所以可以实现在班级表中添加学生的数据)
在这里插入图片描述在这里插入图片描述设置页面描述名称
在这里插入图片描述
在这里插入图片描述设置搜索框位置: action_on_top=False action_on_bottoms=true

使用装饰器完成注册

将最下面一行的注册方式换成@开头的注册方式更加简便
在这里插入图片描述

视图的基本使用

1、概述:在django中,视图对web请求进行回应,回应URL的请求,调用模型和模板
在这里插入图片描述

2、定义视图:
在这里插入图片描述

3、配置URL
修改project里面的urls.py
表示引入myApp.py中的url作为首页
在这里插入图片描述

在myApp应用目录下面创建一个urls.py,urls.py中进行如下写入,表示在首页中引入views视图下的index视图
在这里插入图片描述
重新刷新首页会出现视图
在这里插入图片描述

模板的基本使用

1、概述:模板是HTML页面,可以根据视图传递过来的数据进行填充

2、创建模板目录:创建一个同级的模板文件夹,下面可以细分不同应用的模板
在这里插入图片描述

3、配置路径(因为templates目录之前不存在,所以为了找到它需要进行配置)
修改setting.py文件下的TEMPLATES,进行修改
在这里插入图片描述

4、通过url访问带有模板渲染的视图
(1)定义两个html文件
模板语法:
{{输出值,可以是变量,可以是对象属性}}
{%执行代码段%}
在这里插入图片描述

(2)在myApp下的urls.py中匹配url(http://127.0.0.1:8000/grades)
在这里插入图片描述(3)进行视图的编写,从模型中获取数据交给模板,回到第一步的模板中进行渲染,视图再通过return返回给浏览器
在这里插入图片描述(4)效果
在这里插入图片描述

5、实验班级到学生的跳转
(1)修改模板
在这里插入图片描述(2)添加视图
在这里插入图片描述(3)配置url
在这里插入图片描述

模型

概述

Django对各种数据库提供了很好的支持,为这些数据库提供了统一的的调用API,可以根据不同的业务需求选择数据库

开发流程
配置数据库,settings.py文件中修改
定义模型类
生成迁移文件
执行迁移生成数据表
使用模型类进行增删改查

ORM

ORM:O:对象 R:关系 M:映射
任务:根据对象的类型生成表结构
将对象、列表操作转换为sql语句
将sql语句查询到的结果转换为对象、列表
优点:因为不用考虑不同数据库的语言所以可以简便开发工作人员的工作量
在这里插入图片描述

定义模型

1、模型、属性、表、字段间的关系:一个模型类在数据库中对应一张表,在模型类中定义的属性。对应该模型对应表中的一个字段

2、定义属性
在这里插入图片描述>IntegerField整数类型
DecimalField(max_digits=None,decimal_places=None)(位数总数,小数点后的数字位数) 十进制浮点数
FloatField浮点数
BooleanField/NullBooleanField 布尔类型
Datefield(auto_now=False,auto_now_add=False)(每次修改保存为当前时间,第一次创建保存当前时间)这两个不能写在一起
TimeField/DateTimeField
FileField上传文件的字段
ImageField对上传对象进行校验,确保是一个图片

字段选项:
blank:=True则允许字段为空
db_column=" ":重新修改数据库中列的名称
db_index:=True则在表中为该字段创建索引
default:默认值
primary_key:=True 则该字段会成为主键
unique:=True这个字段在表中有唯一值

关系:
一对多:将字段定义在多的端中
多对多:将字段定义在两端中
一对一:将字段定义在任意一端重
访问:
一访问多:grade1.students_get(pk=1)/all()
一访问一:grade.students
访问id:student.sgrade_id

3、元选项:在模型类中定义Meta类,用于设置元信息

class Meta:
	db_table=""#定义数据表名,建议小写
	ordering=[]#对象的默认排序字段,获取对象的列表时使用['id']升序[-'id']降序

模型成员:
1、类属性:
隐藏类属性objects,是Manager类型的一个对象,作用是与数据库进行交互,当定义模型类没有指定管理器,则Django为模型创建一个名为objects的管理器。

自定义模型管理器:stuObj=models.Manager() Students.objects.get(pk=1)–>Students.stuObj.get(pk=1)

自定义管理器Manager类:
向管理器类中添加额外的方法
修改管理器返回的原始查询集,重写get_queryset()方法
在这里插入图片描述在这里插入图片描述
2、创建对象
目的:向数据库中添加数据
当创建对象时,django不会对数据库进行读写操作,当调用save()方法时才会与数据库交互,将对象保存到数据库表中

创建方法:
(1)定义一个类方法进行创建
在这里插入图片描述在这里插入图片描述在这里插入图片描述

(2)在定义管理器中添加方法
在这里插入图片描述在这里插入图片描述

模型查询
1、查询集:表示从数据库中获取的对象的集合
2、查询集可以有多个过滤器

1、在管理器中添加过滤器,可以采用链式调用.filter.fileter
在这里插入图片描述>2、惰性执行:创建查询集不会带来任何数据访问,直到调用数据时,才会访问数据
3、直接访问数据的情况:迭代、序列化、与if合用
4、返回查询集的方法称为过滤器:
all()
filter()
exclude()
order_by()
values():一个数据就是一个对象(字典),返回一个列表

get():返回一个满足条件的对象,如果没有数据或者返回多条数据会报异常,需要异常处理
count():返回查询集中的数据个数
first():
last():
exists():判断是否有数据

限制查询集:all()[0:5] 注意下标不能是负数
实现分页
在这里插入图片描述
查询集的缓存:每个查询集都有一个缓存,来最小化对数据库的访问

字段查询:
1、概述:实现了sql中的where语句,作为filter等的参数
语法:属性名称_比较运算符=值
外键:属性名_id
转义:类似SQL中的like语句

2、比较运算符(前面加上i就不会区分大小写了)
exact:判断,大小写敏感
contains:是否包含Students.stuObj2.filter(sname_ contains=“h”)
startswith,endswith:以values开头或者结尾
isnull,innotnull:是否为空
in:是否包含在(pk
_in=[1,2,3])
gt/gte/it/ite:大于、大于等于
year/monnth/day/week_day/

3、跨关联查询:处理join查询
grade=Grades.objects.filter(students__scontend__contains=“dcd”)#找出自我介绍中包含dcd的学生属于哪个班级

4、查询快捷:pk:代表的就是主键
5、聚合函数:
使用aggregate()函数返回聚合函数的值
avg\count\max\min\sum

from django.db.models import Max,Min
maxAge=Students.stuObj.aggregate(Max('sage'))
print(maxAge)

F对象:可以使用模型A属性和B属性进行比较

from django.db.models import F,Q
g=Grades.objects.filter(ggirlnum_gt=F('gboynum'))
print(g)

Q对象:过滤器方法中的关键字参数,条件为and模式,实现或关系

from django.db.models import F,Q
g=Grades.objects.filter(Q(pk__lte=3)|Q(sage__gt=50))
print(g)

在这里插入图片描述

视图

概述

1、作用:视图接受web请求,并响应web请求
2、本质:视图就是一个python中的函数
3、响应:
网页:重定向、错误视图(404,500)
JSON数据

在这里插入图片描述

url配置

1、制定根级url配置文件
在settings.py不用修改,已经默认实现了
在这里插入图片描述
2、urlpatterns:一个url实例的列表
url对象:(正则表达式,视图名称,名称)
3、url匹配正则的注意事项:
(1)如果想要从url中获得一个值,需要对正则加上小括号
(2)匹配正则前方不需要加/(因为在project.py里面已经加好了)
(3)正则前加r表示字符串不转义

引入其他url配置
1、在应用中创建url.py文件,定义本应用的url配置,在工程urls.py中使用include
在这里插入图片描述
URL的反向解析
1、概述:如果在视图、模板中使用了硬编码链接,在url配置发生改变时,动态生成链接地址
2、解决:在使用链接 时,通过url配置的名称,动态生成url地址
3、作用:使用url模板

视图函数

1、定义视图:
(1)本质是一个函数
(2)视图参数:一个HttpRequest的实例、通过正则表达式获得参数
(3)位置:一般在views.py下定义

2、错误试图:
(1)404:找不到网页,url匹配不成。在templates下定义404模板
不用配置任何东西直接写404.html文件即可
在这里插入图片描述配置settings.py
在这里插入图片描述
在这里插入图片描述

(2)500:在视图代码中出现错误(服务器代码)
(3)400视图:错误出现在客户操作

HttpRequest对象

1、概述:服务器接受http请求后,会根据报文创建HttpRequest,视图的第一个参数就是HttpRequest对象,是django创建的,之后调用视图时传递给视图

2、属性:
path:请求的完整路径(不包括域名和端口)
method:表示请求的方式,常用的有GET,POST
encoding:表示浏览器提交的数据编码方式
GET:类似字典的对象,包含了get请求的所有参数
POST:类似字典的对象,包含了post请求的所有参数
FILES:类似字典的对象,包含了所有上传的文件
COOKIES:就是字典,包含所有的cookie
session:类似字典的对象,表示当前会话

3、方法:
is_ajax():如果是通过XMLHttpRequest发起的,返回True

4、QueryDict对象:
request对象中的GET、POST属于此对象
方法:
(1)GET:
get():根据键获取值(只能返回一个值)
getlist():将键的值以列表的形式返回(可以获得多个值)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)POST
使用表单提交实现post请求
关闭scrfsettings.py中
在这里插入图片描述

HttpResponse对象

1、概述:
给浏览器返回数据,HttpRequest对象是django创建的,HttpResponse是程序员创建的
2、用法:
(1)不调用模板直接返回数据
(2)调用模板:
使用render方法:
render(request,templateName[context])
结合数据和模板,返回完整的HTML页面
3、属性:
content:表示返回的内容类型
charset:编码格式
status_code:响应装态码
content-type:指定输出的MIMI类型
4、方法:
init:使用页面内容实例化
write(content):以文件的形式写入
flush():以文件的形式输出
set_cookie(key,value,max_age=None,exprise=None):设置cookie
delete_cookie(key):删除
注意:一般用token,cookie容易被截获
在这里插入图片描述
5、子类HttpResponseRedirect:重定向,服务器端的跳转
6、状态保持:
使用session:
get(key,default=Nonr)
clear():
flush():删除当前会话并且删除cookie

状态保持

django高级扩展

静态文件

1、css、js图片,json、字体文件等
2、配置路径
在这里插入图片描述
在这里插入图片描述
3、创建文件夹
在这里插入图片描述
4、语法
在这里插入图片描述

中间件

1、轻量级,底层的插件,可以介入django的请求和响应
2、本质:一个python类
3、方法:
(1)init:不需要传参数,服务器响应第一个请求的时候自动调用,用于确定是否应用该中间件
(2)process_requst(self,request):在执行视图之前被调用(分配url之前),每个请求上都会调用,返回None或者HttpResponse对象(可以阻碍恶意攻击)
(3)process_view(self,request,view_func,view_args,view_kwargs):调用视图之前被调用,每个请求上都会调用,返回None或者HttpResponse对象
(4)process_template(self,request,response):在试图刚好执行完调用,每个请求上都会调用,返回None或者HttpResponse对象,使用render
(5)process_response(self,request,response):所有响应返回浏览器之前调用,每个请求上都会调用,返回HttpResponse对象
(6)process_exception(self,request,exception):当视图抛出异常时调用,返回HttpResponse对象
在这里插入图片描述
4、自定义中间件:

在这里插入图片描述
在这里插入图片描述>配置路径
在这里插入图片描述

上传图片

1、概述:文件上传时,文件数据存储在request.FILES属性中
2、存储路径:在static目录下创建upfile目录用于存储接收上传的文件
3、配置路径:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分页

1、paginator对象:
(1)创建对象:
格式:paginator(列表,整数)
返回值:返回分页对象
(2)属性:
count:对象总数
num_pages:页面总数
page_range:页码列表,[1,2,3,4,5],页码从1开始
(3)方法:
page(num):获得一个page对象,如果提供的页码不存在回抛出异常invalidpage
(4)异常:
invalidpage:当向page()抛出无效的页码
pageNotAnInterger:当向page()传递的不是整数时
EmptyPage:当向page()传递一个有效值,但是该页面没有数据
2、page对象:

在这里插入图片描述

1、创建对象:paginator对象page()方法返回得到page对象,不需要手动创建
2、属性:
(1)object_list:当前页上所有数据列表
(2)number:当前页的页码值
(3)paginator:当前page对象关联的paginator对象
3、方法:
(1)has_next():判断是否又下一页,如果有返回true
(2)has_previous():判断是否有上一页
(3)has_other_pages():判断是否有上一页或者下一页
(4)has_page_number():返回下一页的页码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值