python之路46 django request对象 form表单 pycharm连接数据库 ORM简介

静态文件配置

1.编写一个用户登录页面
2.静态文件
     不怎么经常变化的文件  主要针对html文件所使用的到的各种资源
     css文件、js文件、img文件、第三方框架文件
   django针对静态文件资源需要单独开始一个目录统一存放
     static目录
       该目录下如果各种类型的文件都多  还可以继续创建目录    
         css目录
         js目录
         img目录
         utils目录/plugins目录/libs目录/others目录/不创
3.资源访问
    我们在地址栏中之所以可以属于路由获取到相应的资源是因为程序员提前开设了资源的接口
4.静态文件资源访问
     默认情况下无法访问 因为我们没有提前开设静态文件资源的访问接口

静态文件相关配置

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

1.接口前缀
STATIC_URL = '/XXX/'  # 访问静态文件资源的接口前缀(通行证)
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'),# 存储静态文件资源的目录名称
 os.path.join(BASE_DIR,'static1'), # 存储静态文件资源的目录名称
 os.path.join(BASE_DIR,'static2'), # 存储静态文件资源的目录名称  
]
'''
接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下查找 一旦找到就返回
'''

2.接口前缀动态匹配
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

form表单

action      控制数据提交的地址
    1.action=""  数据默认提交给当前页面所在的地址
    2.action="https://www.baidu.com/"  完整地址
    3.action="/index/"  朝当前服务端的index地址提交
method       控制数据提交的方法
    默认是get
    可以改post
    
请求方法补充
   get  朝服务端索要数据   也可以携带一些额外的要求
            携带额外数据的方式:   URL?xxx=yyy&uuu=zzz
            问号后面携带数据的大小是有限制(2KB)的并且不能携带敏感数据
   post  朝服务端提交数据
             携带额外数据的方式: 请求体
             请求体携带数据安全性较高并且没有大小限制
前期发送post请求需要注释掉配置文件中的某一行
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

request对象

request.method    获取请求方式  结果是纯大写的字符串数据
      GET\POST
request.POST      获取post请求请求体里面携带的数据
     request.POST.get()    获取列表最后一个数据值
     request.POST.getlist() 获取整个列表数据
request.GET        获取网址问号后面携带的数据
     request.GET.get()      获取列表最后一个数据值
     request.GET.getlist()  获取整个列表数据
"""
在视图函数中对不同的请求代码编写套路
    if request.method == 'POST':
         return HttpResponse()
    return HttpRespose()
"""

pycharm连接数据库

1.pycharm初次连接数据库  需要下载对应的驱动
2.连接数据库 输入用户名和密码 点刷新
3.修改settings配置  下载一个模块mysqlclient模块

django连接数据库

django自带sqlite3是一个小型的数据库 功能比较少 主要用于本地测试
我们实际项目中都会替换掉它

默认配置sqlite3
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

1.修改配置文件
DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'day51',
        'HOST': '127.0.0.1',
        'PORT':3306,
        'USER': 'root',
        'PASSWORD': '222',
        'CHARSET': 'utf8'
    }
}
2.需要指定模块
  django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
      import  pymysql
      pymysql.install_as_MySQLdb()
  django2.X及以上都可以直接通过下载mysqlclient模块解决
       pip3.8 install mysqlclient  源错误加 --trusted
  ps:该模块 windows下载问题不大 主要是mac电脑可能有问题(如果有问题 改源码 把decode 改成encode)

ORM简介

ORM:对象关系映射
    能够让不会SQL语句的python程序员 使用python面向对象的语法来操作数据库
 类                表
 对象              一条条数据
 对象点名字        数据获取字段对应的值

ORM由于高度封装了SQL 所以有时候效率较低 我们需要自己写SQL

ORM基本操作

1.先在models.py中编写模型类
    class GirlsInfo(models.Model):  # 模型类
    # id int primary key auto_increment
    id = models.AutoField(primary_key=True) # 字段名 = 字段类型 + 约束条件
    # name varchar(32)
    name = models.CharField(max_length=32)
    # age int
    age = models.IntegerField()
2.执行数据库迁移相关命令
   python38 manage.py makemigrations   将操作记录到小本本上(migrations)
   python38 manage.py migrate          将操作同步到数据库上(数据库迁移命令)
'''
主要每次在models.py修改了与数据库相关的代码  都需要再次执行上述命令
'''
"""
首次创建django会额外创建很多内部需要用到的表 针对程序员自己创建的表名在表名前面加上应用前缀用于区分多个应用表名可能冲突的情况
"""

ORM基本语句

from app01 import models

if request.method == 'POST':
        name = request.POST.get('name')
        pwd = request.POST.get('pwd')
        # 1.创建数据
        # models.GirlsInfo.objects.create(name=name, age=pwd)
        # # 2.查询数据
        # res = models.GirlsInfo.objects.filter(name=name)
        # print(res)  # [数据对象,]  queryset
        # print(res[0])
        # print(res[0].id)
        # print(res[0].name)
        # print(res[0].age)
        #  3.修改数据
        # models.GirlsInfo.objects.filter(id=1).update(name='阿香',age=18)
        # 4.删除数据
 models.GirlsInfo.objects.filter(id=3).delete()

models.类名.objects.create()   增  insert into
models.类名.objects.filter()   筛选  where
models.类名.objects.filter.update()   改  update
models.类名.objects.filter.delete()   删   delete

image

posted @ 2022-12-10 19:23  缀月  阅读(143)  评论(0编辑  收藏  举报