[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请求生命周期]的更多相关文章

  1. Django静态文件配置 request对象 Django操作MySQL

    Django中的文件介绍 render.HttpResponse和redirect 当我们想起手写一个项目,创建好应用并且注册之后,在urls.py文件先导入app文件夹下migrations下的vi ...

  2. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  3. HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM

    HttpResponse 主要用于返回字符串类型的数据 def index(request): return HttpResponse('index页面') 在页面中就会显示 index页面 rend ...

  4. Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作

    静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...

  5. Django静态文件配置-request方法-ORM简介-字段的增删改查

    app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...

  6. django -- ORM实现出版社增删改查

    前戏 我们来完成一个图书管理系统的增删改查 表结构设计 1. 出版社 id   name 2. 作者 id  name 3. 书 id  title  出版社_id 4. 作者_书_关系表 id  书 ...

  7. django -- ORM实现作者增删改查

    前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...

  8. django -- ORM实现图书增删改查

    表结构设计 上篇我们实现了出版社的增删改查,出版社数据表有两个字段id和name,那图书的表结构怎么设计呢?图书也要有一个主键id,还要有一个名称title,是哪个出版社的,要有个字段press和Pr ...

  9. 用户增删改查 django生命周期 数据库操作

    一 django生命周期 1 浏览器输入一个请求(get/post)2 响应到django程序中3 执行到url,url通过请求的地址匹配到不同的视图函数4 执行对应的视图函数,此过程可以查询数据库, ...

随机推荐

  1. SqlServer存储过程的创建与使用

    什么是存储过程? T-SQL中的存储过程,非常类似于net语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句. 这样就可以提高存储过程的性能. ...

  2. IT培训有哪些坑(三)?

    我们继续来说说IT培训的坑,今天讲的这点,非常重要,几乎适合于所有层面的培训,不仅仅是IT行业.近期有参加各种培训打算的,包括各种营销培训,管理培训等等,都是有用的. 有大企业,名人背景的不靠谱.不要 ...

  3. 前端使用bcrypt对密码加密,服务器对密码进行校验

    以前为了防止前端密码安全问题,都是对密码进行md5(password + salt). 有些也会用别的加密方式,但还是会存在撞库,彩虹表等破解常规密码. 因此使用bcrypt加密是一个不错的选择,因为 ...

  4. Netflix业务运维分析和总结

    目录 Netflix工作环境的分析和思考 为什么Netflix会做得如此极致? 海量业务规模下的技术架构和挑战 更加合理的组织架构和先进的工具体系及理念 自由与责任并存的企业文化 当前问题: 精选提问 ...

  5. 第24 章 : Kubernetes API 编程利器:Operator 和 Operator Framework

    Kubernetes API 编程利器:Operator 和 Operator Framework 本节课程主要分享以下三方面的内容: operator 概述 operator framework 实 ...

  6. Distributed | MapReduce

    最近终于抽出时间开始学习MIT 6.824,本文为我看MapReduce论文和做lab后的总结. [MapReduce英文论文] lab要用到go语言,这也是我第一次接触.可以参考go语言圣经学习基本 ...

  7. Dynamic CRM登陆界面的客制化(持续更新)

    Dynamic CRM的登陆页面比较西化,不是很适合中国人使用.目前先把注销跳转的问题解决了. 服务端使用下面命令,将文件导出来 Export-AdfsWebTheme –Name default – ...

  8. Install Tensorflow object detection API in Anaconda (Windows)

    This blog is to explain how to install Tensorflow object detection API in Anaconda in Windows 10 as ...

  9. (十三)Docker容器进入的4种方式

    简介 在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进入Docker容器比较常见 ...

  10. matlab map容器类型

    matlab map容器类型 map容器类型以及map类概述 map是将一个量映射到另一个量上,此是前面的量就是map的键(key),后面的量就是map的数据(value).map的键和对应的数据都储 ...