今日内容概要
静态文件配置
| 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> |
| action 控制数据提交的地址 |
| 1.action="" 数据默认提交给当前叶敏所在的地址 |
| 2.action="http://www.baidu.com" 完整地址 |
| 3.action="/index/" 朝当前服务端的index地址提交 |
| |
| method 控制数据提交的方法 |
| 默认是get |
| 可以改post |
| |
| 请求方法补充 |
| get |
| 朝服务端索要数据 也可以携带一些额外的要求 |
| 携带额外数据的方式: URL?xxx=yyy |
| 问好后面携带数据的大小是有限制(2KB)的并且不能携带敏感数据 |
| post |
| 朝服务端提交数据 |
| 携带额外数据的方式: 请求体 |
| 请求体携带数据安全性较高并且没有大小限制 |
| |
| 前期发送post请求需要注释掉配置文件中的某一行 |
| MIDDLEWARE = [ |
| 'django.middleware.security.SecurityMiddleware', |
| 'django.contrib.sessions.middleware.SessionMiddleware', |
| 'django.middleware.common.CommonMiddleware', |
| |
| '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 HttpRespnse() |
| return HttpResponse() |
| """ |
pycharm连接数据库
| 1.pycharm初次连接数据库 需要下载对应的驱动 |
django连接数据库
| django自带的splite3是一个小型的数据库 功能比较少 主要用于本地测试 |
| 我们实际项目中都会替换掉它 |
| |
| 默认配置sqlite3 |
| DATABASES = { |
| 'default':{ |
| 'ENGINE': 'django.db.backends.sqlites', |
| 'NAME': os.path.join(BASE_DIR,'db.sqlite3'), |
| } |
| } |
| |
| 1.修改配置文件 |
| DATABASES = { |
| 'default':{ |
| 'ENGINE':'django.db.backends.sqlites', |
| 'NAME':'day51', |
| 'HOST':'127.0.0.1', |
| 'POST': 3306, |
| 'USER': 'root', |
| 'PASSWORD': '123', |
| 'CHAREST':'utf8' |
| } |
| } |
| 2.需要指定模块 |
| django1.x版本需要在项目目录下或者app目录下的__init__.py编写代码 |
| import pymysql |
| pymysql.install_as_MySQLdb() |
| django2.x及以上都可以直接通过下载mysqlclient模块解决 |
ORM简介
| ORM:对象关系映射 |
| 能够让不会SQL语句的python程序员 使用python面向对象的语法来操作数据库 |
| |
| 类 表 |
| 对象 一条条数据 |
| 对象点名字 数据获取字段对应的值 |
| |
| ORM由于高度封装了SQL 所以有时候效率较低 我们需要自己写SQL |
ORM基本操作
| 1.现在models.py中编写模型类 |
| class GirlsInfo(models.Model): |
| |
| id = models.AutoField(primary_key=True) |
| name = models.CharField(max_length=32) |
| age = models.IntegerField() |
| 2.执行数据库迁移相关命令 |
| python38 manage.py makemigrations 将操作记录到小本本上(migrations) |
| python38 manage.py migrate 将操作同步到数据库上 |
| '''注意每次在models.py修改了与数据库相关的代码 都需要再次执行上述命令''' |
ORM基本语句
| from app01 import models |
| models.类名.objects.create() |
| models.类名.objects.filter() |
| models.类名.objects.筛选条件.update() |
| models.类名.objects.delete() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构