Django 静态配置文件、request请求数据、pycharm配置Mysql数据迁移、ORM增删改查、生命周期

Django 静态文件

Django 静态配置文件

静态文件

写好之后不会自动动态改变的文件资源,比如我们写好的css文件、js文件、图片文件、第三方框架文件,我们默认将所有的静态文件都放在一个static文件夹内,

django是不会自动创建static文件夹的,需要我们自己在的django目录下手动创建该文件夹
一般情况下我们在 static文件夹内还会做进一步的划分处理,拿来就可以直接使用:

static
   ├─ bootstrap 前端已经写好了的能够直接调用的文件
   ├─  js  写好的js文件
   ├─  css 写好的css文件
   ├─  img 用到的img文件
   └─  其他第三方文件资源

settings.py 静态文件配置

1.settings.py中配置

STATIC_URL = '/static/'  # 静态文件请求根路由
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')   # 静态文件检索的文件夹
]
2.在项目根目录下创建static文件夹
3.静态文件就放在static根目录或子目录下
4.获取静态文件:/static/目标文件(可以包含static子文件夹路径)
5.进阶操作
    STATIC_URL = '/static/'  # 接口前缀
    """
    如果你想要访问静态文件资源,那么必须以static开头
    <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
    你书写了接口前缀之后 就拥有了访问下列列表中所有文件夹内部资源的权限
    """
    # 静态文件配置
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'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>

手动打开用户上传图片路径

1 创建目录media

2 settings配置
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

3 路由设置
from django.views.static import serve
from apii import settings

urlpatterns = [
    path('media/<str:path>', serve, {'document_root': settings.MEDIA_ROOT}),
]

form表单知识回顾

form表单默认使用的是get请求数据

form表单action参数:控制后端提交的路径

  • 1.不写:默认朝当前所在的url(页面地址)提交数据
  • 2.全写:指名道姓 https://www.baidu.com
  • 3.只写后缀 :/index/

form表单method参数:默认是get请求,可以改成post请求

在前期使用django提交post请求的时候需要先去配置文件中注释掉一行代码

request 请求数据

request 对象方法

request对象方法
   request.method
          获取当前请求的请求方法并且结果是一个纯大写的字符串类型

   request.POST  # 直接看成是字典即可
          获取用户提交post请求过来的基本数据(不包含文件)

           get()  # 获取列表最后一个元素
           getlist()  # 获取整个列表

   request.GET  # 直接看成是字典即可

          获取url问好后面的数据

          get()  # 获取列表最后一个元素
          getlist()  # 获取整个列表
   
  request.FILES  # 直接看成是字典即可
        获取用户上传的文件数据
        form表单如果需要携带文件数据 那么要添加参数
        <form action="" method="post" enctype="multipart/form-data">
        
        get()  # 获取列表最后一个元素
        getlist()  # 获取整个列表

视图函数书写格式

# 书写格式(层级复杂不推荐)
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配置Mysql数据迁移

在settings.py配置Mysql

1.在settings.py配置Mysql数据库信息
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名', # 数据库名称 一定要事先创建好才能指定
        'HOST': '127.0.0.1', # 数据库IP,暂用本地回环地址
        'PORT': 3306, # 数据库端口
        'USER': 'root', # 数据库用户名
        'PASSWORD': '123' # 数据库密码
        'CHARSET': 'utf8' # 指定字符编码
    }
}

2. 1.1.x版本在项目或应用的init文件中修改连接数据库的模块为pymysql
import pymysql
pymysql.install_as_MySQLdb()

3. 2.2.x版本不需要配置 安装mysqlclient包

4.在项目目录下,执行(生成迁移数据,没有映射到数据库):python3 manage.py makemigrations

5.将迁移数据映射到数据库:python3 manage.py migrate

pycharm链接数据库

Database工具栏

下载对应驱动即可

Django ORM简介

"""
ORM:对象关系映射
作用:目的就是为了能够让不懂SQL语句的人通过python面向对象的知识点也能够轻松自如的操作数据库
缺陷:封装程度太高,有时候sql语句的效率偏低,需要自己写SQL语句
"""
类 ---------------->>> 表
对象 --------------->>> 表里面的数据
对象点属性 ---------->>> 字段对应的值

1.Django 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中跟数据库相关的代码就必须重新执行上述两条命令
****************************************************************************
3.针对主键字段
    class User1(models.Model):
        # 如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段
        # 如果你想让主键字段名不叫id 叫uid、sid、pid等则需要自己手动指定
        username = models.CharField(max_length=32)

2.数据库同步命令(了解)

"""
数据库里面已经有一些表,我们如何通过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'

blank参数
设置为True时,字段可以为空。设置为False时,字段是必须填写的。字符型字段CharField和TextField是用空字符串来存储空值的。

如果为True,字段允许为空,默认不允许。

null参数
设置为True时,django用Null来存储空值。日期型、时间型和数字型字段不接受空字符串。所以设置IntegerField,DateTimeField型字段可以为空时,需要将blank,null均设为True。

CharField时,可填空白值  '',这时html上显示为空白,IntegerField,DateTimeField等不允许值为 ''

一句话概括
null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空。
blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面下增加 model 一条记录的时候。直观的看到就是该字段不是粗体

3.字段的增删改查

# 字段的增加
1.可以在终端内直接给出默认值
2.该字段可以为空
  pwd = models.IntegerField('密码',null=True)  
3.直接给字段设置默认值
  is_delete = models.IntegerField(default=0)  

# 字段的修改
直接修改代码,然后执行数据库迁移的两条命令即可

# 字段的删除
直接注释对应的字段,然后执行数据库迁移的两条命令即可
执行完毕之后字段对应的数据也都没有了
"""
在操作modles.py的时候一定要细心
 千万不要手误注释掉重要的字段
 执行迁移命令之前一定要检查下自己写的代码
 建议:离开你的计算机之后一定要锁屏
"""

4.数据的增删改查

# 1.查询数据
# select * from user where name=username;
user_obj = models.User.objects.filter(name=username).first()

# 2.添加数据
# insert into user(name,pwd) values(username,password);
models.User.objects.create(name=username,pwd=password)

# 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()

5.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 请求生命周期

1.生命周期流程

'''
1.浏览器发送请求
2.wsgi服务器接收到请求,将请求解析交给Django
3.Django中间件过滤请求信息,交给路由
4.路由完成业务逻辑的分发,到指定app下views中指定的视图函数
5.视图函数完成具体的业务逻辑,返回响应结果
6.将处理结果通过服务器返回给浏览器
'''

2.生命周期流程图

posted @ 2021-11-29 18:58  沈忻凯  阅读(115)  评论(0)    收藏  举报