[Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
我们将html文件默认都放在templates文件夹下
将网站所使用的静态文件默认都放在static下
静态文件
写好之后不会自动动态改变的文件资源,比如我们写好的css文件、js文件、图片文件、第三方框架文件,我们默认将所有的静态文件都放在一个static文件夹内,
django是不会自动创建static文件夹的,需要我们自己在的django目录下手动创建该文件夹
一般情况下我们在 static文件夹内还会做进一步的划分处理,拿来就可以直接使用:
static
├─ bootstrap 前端已经写好了的能够直接调用的文件
├─ js 写好的js文件
├─ css 写好的css文件
├─ img 用到的img文件
└─ 其他第三方文件资源
之所以在浏览器中输入url 能够看到对应的资源,是因为开发者早已提前在后端开设了该资源的访问接口
如果访问不到资源,说明后端没有开设该资源的接口
http://127.0.0.1:8000/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
settings.py 静态文件配置
# 如果想要访问静态文件就必须以static开头
STATIC_URL = '/static/' # 接口前缀 类似于访问静态文件的令牌
"""
例如有此路径:
<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
/static/ 前面这个就是接口前缀
bootstrap-3.3.7-dist/js/bootstrap.min.js 后面的就是路径
书写了接口前缀之后 就拥有了访问下列列表中所有文件夹内部资源的权限
然后会以从上往下的顺序在列表里面依次查找,直到拿到路径返回给页面
都没有才会报错
"""
# 静态文件配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static') # 这个static就是真正的静态文件夹路径
os.path.join(BASE_DIR, 'static1')
os.path.join(BASE_DIR, 'static2')
]
静态文件接口前缀动态解析
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态解析</title>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
</head>
<body>
</body>
</html>
form表单知识回顾
form表单默认使用的是get请求数据
form表单action参数:控制后端提交的路径
- 1.不写:默认朝当前所在的url(页面地址)提交数据
- 2.全写:指名道姓 https://www.baidu.com
- 3.只写后缀 :/index/
form表单method参数:默认是get请求,可以改成post请求
在前期使用django提交post请求的时候需要先去配置文件中注释掉一行代码
request对象方法初识
request.method # 返回字符串<cass'str'>
获取当前请求的请求方法,并且结果是一个纯大写的字符串类型
request.POST # 直接看成是字典即可
获取用户提交post请求过来的基本数据(不包含文件)
request.POST.get()
get方法只获取列表最后一个元素
request.POST.getlist()
getlist方法会直接获取整个列表,不管里面有几个元素
request,GET # 直接看成是字典即可
获取用户提交的get请求数据(url问号后面的数据)
request.GET.get()
get方法只获取列表最后一个元素
request.GET.getlist()
getlist方法会直接获取整个列表,不管里面有几个元素
request.FILES # 直接看成是字典即可
获取用户上传的文件数据
request.FILES.get()
get方法只获取列表最后一个元素
request.FILES.getlist()
getlist方法会直接获取整个列表,不管里面有几个元素
'''
get请求携带的数据是有大小限制的大概好像只有4KB左右
而post请求则没有限制
form表单如果需要携带文件数据 那么要添加参数
<form action="" method="post" enctype="multipart/form-data">
'''
视图函数书写格式
# 书写格式(层级复杂不推荐)
def login(request):
"""
get请求和post请求应该有不同的处理机制
:param request:请求相关的数据对象里面有很多简易的方法
:return:
"""
print(type( request.method)) # 返回请求方式并且是纯大写的字符串类型<class str>
if request.method == 'GET':
# 返回给浏览器一个登陆界面
return render(request,'login.html')
elif request.method == 'POST':
return Httpresponse("收到了宝贝")
# 标准书写格式(层级精简推荐)
def login(request):
if request.method == 'POST':
return Httpresponse("收到了宝贝")
return render(request,'login.html')
pycharm链接数据库
Database工具栏
下载对应驱动即可
django链接数据库(MySQL)
1.在settings.py配置文件修改配置
# 默认用的是sqkite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
"""django默认使用自带的sqlite3"""
# django链接MySQL
1.第一步配置文件中配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db666', # 数据库名称 一定要事先创建好才能指定
'HOST':'127.0.0.1', # 数据库IP,暂用本地回环地址
'PORT':3306, # 数据库端口
'USER':'root', # 数据库用户名
'PASSWORD':'111', # 数据库密码
'CHARSET':'utf8' # 指定字符编码
}
}
2、↓↓↓↓↓↓↓↓代码申明↓↓↓↓↓↓↓↓
2.在项目文件夹或者应用文件夹内的__init__.py文件中书写固定的代码
django默认用的是mysqldb模块链接MySQL
但是该模块的兼容性不好,需要手动改为用pymysql模块链接
.代码声明
django默认用的是mysqldb模块链接MySQL
但是该模块的兼容性不好 需要手动改为用pymysql链接
你需要告诉django不要用默认的mysqldb还是用pymysql
# 在项目名下的init或者任意的应用名下的init文件中书写以下代码都可以
import pymysql
pymysql.install_as_MySQLdb()
django ORM简介
"""
ORM:对象关系映射
作用:目的就是为了能够让不懂SQL语句的人通过python面向对象的知识点也能够轻松自如的操作数据库
缺陷:封装程度太高,有时候sql语句的效率偏低,需要自己写SQL语句
"""
类 ---------------->>> 表
对象 --------------->>> 表里面的数据
对象点属性 ---------->>> 字段对应的值
ORM实操
1. 模型类需要写在应用下的models.py文件中
class User(models.Model):
# id int primary key auto_increment
id = models.AutoField(primary_key=True)
# name varchar(32)
name = models.CharField(max_length=32) # CharField必须要加max_length参数,不加报错
# age int
age = models.IntegerField()
2. 数据库迁移命令(非常重要)
********************************************************************
* 1.将数据库修改操作先记录到小本本上(对应应用下的migrations文件夹)
* python3 manage.py makemigrations
*
* 2.真正的执行数据库迁移操作
* python3 manage.py migrate
* # 只要动了models.py中跟数据库相关的代码就必须重新执行上述两条命令
********************************************************************
首次执行数据库迁移命令会发生的事儿
数据库同步命令(了解)
"""
数据库里面已经有一些表,我们如何通过django orm操作?
1.照着数据库表字段自己在models.py
数据需要自己二次同步
2.django提供的反向同步
"""
1.先执行数据库迁移命令 完成链接
python manage.py makemigrations
2.查看代码
python manage.py inspectdb
class Userinfo(models.Model):
id = models.IntegerField(blank=True, null=True)
name = models.CharField(max_length=32, blank=True, null=True)
pwd = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'userinfo'
3. 针对主键字段
class User(models.Model):
# 由于一张表中必须要有一个主键字段,并且一般情况下都叫id字段
# 如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段
# 如果你想让主键字段名不叫id 叫uid、sid、pid等则需要自己手动指定
username = models.CharField(max_length=32)
class User1(models.Model):
# id int primary_key auto_increment
id = models.AutoField(primary_key=True,verbose_name='主键')
# username varchar(32)
username = models.CharField(max_length=32,verbose_name='用户名')
"""
CharField必须要指定max_length参数 不指定会直接报错
verbose_name该参数是所有字段都有的 就是用来对字段的解释
"""
# password int
password = models.IntegerField(verbose_name='密码')
4. 字段的增删改查
# 字段的增加
1.可以在终端内直接给出默认值
2.该字段可以为空
pwd = models.IntegerField('密码',null=True)
3.直接给字段设置默认值
is_delete = models.IntegerField(default=0)
# 字段的修改
直接修改代码,然后执行数据库迁移的两条命令即可
# 字段的删除
直接注释对应的字段,然后执行数据库迁移的两条命令即可
执行完毕之后字段对应的数据也都没有了
"""
在操作modles.py的时候一定要细心
千万不要手误注释掉重要的字段
执行迁移命令之前一定要检查下自己写的代码
建议:离开你的计算机之后一定要锁屏
"""
5. 数据的增删改查
# 1.查询数据
# select * from user where name=username;
res = models.User.objects.filter(username=username)
user_obj = models.User.objects.filter(username=username).first()
"""
返回值你先看成是列表套数据对象的格式
它也支持索引取值 切片操作 但是不支持负数索引
它也不推荐你使用索引的方式取值
user_obj = models.User.objects.filter(username=username).first()
filter括号内可以携带多个参数 参数与参数之间默认是and关系
你可以把filter联想成where记忆
"""
# 2.添加数据
# insert into user(name,pwd) values(username,password);
from app01 import models
res = models.User.objects.create(username=username,password=password)
# 返回值就是当前被创建的对象本身
# 第二种增加
user_obj = models.User(username=username,password=password)
user_obj.save() # 保存数据
# 3.查询所有的数据
# select * from user;
models.User.objects.all() # [obj1,obj2,obj3,obj4]
# 4.修改数据
models.User.objects.filter(id=edit_id).update(name=username,pwd=password)
edit_obj.name = username
edit_obj.pwd = password
edit_obj.save()
# 5.删除数据
models.User.objects.filter(id=delete_id).delete()
ORM创建外键关系
1.表与表之间的关系
一对多
一对一
多对多
2.表关系的判断
换位思考
ORM针对外键字段的创建位置
一对多:推荐建在多的一方
一对一:建在任何一方都可以,但是推荐建在查询频率较高的表中
多对多:1.自己建表
2.建在任何一方都可以,但是推荐建在查询频率较高的表中
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8,decimal_places=2) # 总共8位 小数占2位
# 出版社外键
publish = models.ForeignKey(to='Publish') # 默认就是主键
"""自动在外键字段后面加_id后缀"""
# 作者外键
authors = models.ManyToManyField(to='Author') # 自动帮你创建书籍和作者的第三张表
"""虚拟字段不会在表中实例化出来 而是告诉ORM创建第三张关系表"""
class Publish(models.Model):
title = models.CharField(max_length=32)
email = models.EmailField()
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
author_detail = models.OneToOneField(to='AuthorDetail')
"""自动在外键字段后面加_id后缀"""
class AuthorDetail(models.Model):
phone = models.BigIntegerField()
addr = models.CharField(max_length=128)
django请求生命周期流程图
一、Django请求的生命周期的含义
Django请求的生命周期是指:当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情。
二、Django请求的生命周期图解及流程
首先,用户在浏览器中输入url,发送一个GET方法的request请求。
Django中封装了socket的WSGi服务器,监听端口接受这个request 请求,
再进行解析封装,然后传送到中间件中,这个request请求再依次经过中间件,
对请求进行校验或处理,再传输到路由系统中进行路由分发,匹配相对应的视图函数(FBV),
再将request请求传输到views中的这个视图函数中,进行业务逻辑的处理,
调用modles模型层中表对象,通过orm拿到数据库(DB)的数据。
同时拿到templates中相应的模板进行渲染,然后将这个封装了模板response响应传输到中间键中,
依次进行处理,最后通过WSGi再进行封装处理,响应给浏览器展示给用户。
[Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]的更多相关文章
- Django静态文件配置 request对象 Django操作MySQL
Django中的文件介绍 render.HttpResponse和redirect 当我们想起手写一个项目,创建好应用并且注册之后,在urls.py文件先导入app文件夹下migrations下的vi ...
- Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...
- HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM
HttpResponse 主要用于返回字符串类型的数据 def index(request): return HttpResponse('index页面') 在页面中就会显示 index页面 rend ...
- Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作
静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...
- Django静态文件配置-request方法-ORM简介-字段的增删改查
app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...
- django -- ORM实现出版社增删改查
前戏 我们来完成一个图书管理系统的增删改查 表结构设计 1. 出版社 id name 2. 作者 id name 3. 书 id title 出版社_id 4. 作者_书_关系表 id 书 ...
- django -- ORM实现作者增删改查
前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...
- django -- ORM实现图书增删改查
表结构设计 上篇我们实现了出版社的增删改查,出版社数据表有两个字段id和name,那图书的表结构怎么设计呢?图书也要有一个主键id,还要有一个名称title,是哪个出版社的,要有个字段press和Pr ...
- 用户增删改查 django生命周期 数据库操作
一 django生命周期 1 浏览器输入一个请求(get/post)2 响应到django程序中3 执行到url,url通过请求的地址匹配到不同的视图函数4 执行对应的视图函数,此过程可以查询数据库, ...
随机推荐
- c++ 反汇编 堆变量
malloc _malloc 0037E8C0 8B FF mov edi,edi 0037E8C2 55 push ebp 0037E8C3 8B EC mov ebp,esp 0037E8C5 6 ...
- python3 int() 各数据类型转int
print(int('0b1010',0))#二进制数print(int('0xa',0))#十六进制数print(int('0xa',16))print(int('a',16))print(int( ...
- VIM 编辑器操作详解
1 vim 使用介绍 1.1 vim 安装 # CentOS 安装: yum install -y vim # Ubuntu 安装: sudu apt-get install vim 安装完成后,可使 ...
- ss 命令简介
1. 简介 ss 使用 netlink 与内核 tcp_diag 模块通信获取 socket 信息,用法和输出结果类似于 netstat 命令 语法格式如下 ss [options] [ FILTER ...
- 在PHP7以上版本使用不了mysql扩展
旧程序使用了mysql扩展,而新环境却是PHP7以上版本,不支持mysql扩展,办法是将旧程序中的mysql相关内容修改为mysqli或PDO代码. 但是涉及修改的量大,那则可以包含(include ...
- MySQL常用配置参数说明
1.sync_binlog sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来 ...
- 【2.0 递归 Recursion 01】
[介绍] Java的一个方法可以调用它自己,Java和所有编程语言都可以支持这种情况,我们把它叫做递归Recursion 递归方法是一种调用自身的方法 那么使用递归方法是是怎么样的呢,让我们看看下面这 ...
- Java实现基于朴素贝叶斯的情感词分析
朴素贝叶斯(Naive Bayesian)是一种基于贝叶斯定理和特征条件独立假设的分类方法,它是基于概率论的一种有监督学习方法,被广泛应用于自然语言处理,并在机器学习领域中占据了非常重要的地位.在之前 ...
- DDD实践反思
某大型互联网公司于2019年开始在XX中台财务域进行DDD实践.事后回顾,整体并没有达到预期的效果,个人也做了很多的反思和总结,形成此文. 1. 背景 为什么当时要实践DDD?其中的缘由比较复杂,可以 ...
- 08- adb常用命令以及模拟器链接adb命令
adb 命令简介 ADB即 Android debug bridge.是Android下面一个通用的调试工具. 熟练使用adb命令会大大增加开发效率,作为测试人员,熟练掌握adb,我们可以管理设备或手 ...