![ab8ebbdf185299482d39614964b2d8fc.png](https://i-blog.csdnimg.cn/blog_migrate/1d8b82f892ca0e290baa173cb7ecabd6.png)
每日测验
"""
今日考题
1.什么是静态文件,django静态文件配置如何配置,如何解决接口前缀不断变化,
html页面上路径的引用需要反复修改的问题
2.request对象的方法有哪些,分别是干什么用的,请具体阐述细节及注意事项
3.django自带的数据库是什么,如何换成其他数据库例如MySQL,如何配置更换
4.什么是django orm,如何使用django orm,数据库迁移命令如何书写
5.orm字段的增删改查与数据的增查如何实现
"""
答案
1.什么是静态文件,django静态文件配置如何配置,如何解决接口前缀不断变化,
html页面上路径的引用需要反复修改的问题
静态文件就是之前写好的js,css,img,框架其他的第三方文件
先在项目中创建一个static文件夹,把bootstrap文件拷贝到项目中
在settings.py里面加上这些代码用来配置静态文件
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
任它变化的解决方法:
在html文件中的head里面写上下面的格式的代码
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.js' %}"></script>
2.request对象的方法有哪些,分别是干什么用的,请具体阐述细节及注意事项
request.method 查看get还是post请求方式,返回str纯大写
request.GET 获取用户的get请求的数据
request.GET.get() 获取用户的get请求列表中最后一个元素
request.Get.getlist() 获取用户的get请求的列表全部元素
request.POST 获取用户的post请求的数据,不包括文件
request.POST.get() 获取用户的post请求列表中最后一个元素
request.POST.getlist() 获取用户的post请求的列表全部元素
3.django自带的数据库是什么,如何换成其他数据库例如MySQL,如何配置更换
sqllit3
需要去settings.py文件中重写DATABASES
具体重写:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day60',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306,
'CHARSET': 'utf8'
}
}
4.什么是django orm,如何使用django orm,数据库迁移命令如何书写
Django的ORM就是对象关系映射
去models.py创建一个类,继承models.Model类,然后添加字段,然后敲数据库迁移命令
数据库迁移命令:
python manage.py makemigrations 记录
python manage.py migrate 更新数据库
5.orm字段的增删改查与数据的增删查改如何实现
字段
增: Ⅰ:终端敲 Ⅱ:null=True Ⅲ:default=默认值
改: 在模型类直接改,然后敲数据库迁移命令
查: 直接看
删: 注释掉要删掉的字段,然后敲数据库迁移命令
数据
查:models.类名.objects.filter(username=username)
obj = models.User.objects.filter(username=username).first()
增:models.User.objects.filter().create(username=username, password = password)
删: models.User.object.filter().delete()
改: modesl.User.object.filter().upadte(username=username, password = password)
内容回顾
- 静态文件配置
"""
在浏览器窗口输入url之所以能够访问到对应的资源是因为后端提前开设了该资源的访问接口
我们习惯将html文件存放在templates文件夹下
我们习惯将静态文件存放在static文件夹下
静态文件
网站已经写好的 活着是第三方现成的代码 直接拷贝使用
css文件 js文件 img文件 第三方组件
static文件夹内还会创建几个文件夹
css
js
img
第三方
django不会自动帮你创建static文件夹需要你自己手动创建
"""
STATIC_URL = '/static/' # 访问静态文件的令牌
# 静态文件配置 settings.py
STATICFILES_DIRS = [ # 令牌持有者可以访问的文件路径
os.path.join(BASE_DIR,'static'),
os.path.join(BASE_DIR,'static1'),
os.path.join(BASE_DIR,'static2'),
]
"""
查找顺序就是从上往下依次查找,查找到一个就不会继续往下找了所以可能会出现替换的情况
"""
# 令牌动态解析
<link href="/static/a.txt"></link>
{% load static %}
<link href="{% static 'a.txt' %}"></link>
- request对象方法
# 登陆功能
# form表单action三个参数写法
request.method # 获取当前请求方式 全大写的字符串
request.GET # 获取url问好后面携带的参数
.get() 列表最后一个元素
.getlist() 拿整个列表
request.POST # 获取post请求提交过来的普通键值对(不包含文件)
.get() 列表最后一个元素
.getlist() 拿整个列表
"""
前期我们在朝django后端提交post请求的是时候要先去配置文件中注释一行代码
MIDDLEWARE = [
# csrf...
]
"""
def index(request):
if request.method == 'POST':
return HttpResponse('post')
return HttpResponse('get')
- pycharm链接数据库
# 找到pycharm database选项(三个地方查找)
# 选取对应的数据库 下载对应的驱动
"""
明明链接上了数据库 但是看不到表无法操作
这个时候你只需要将刚刚创建的链接删除 重新链接一次即可
"""
- django链接MySQL
# 1.配置文件中配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day60',
'USER':'root',
'PASSWORD':'admin123',
'HOST':'127.0.0.1',
'PORT':3306,
'CHARSET':'utf8'
}
}
# 2.init文件指定pymysql
import pymysql
pymysql.install_as_MySQLdb()
- django orm(重要)
"""
orm不会帮你创建库 只能创建到表的层面
需要你自己提前创建好库
"""
# 对象关系映射
表 类
记录 对象
数据 对象属性/方法
"""
能够让一个不会sql语句的python程序员也能够简单快捷的操作数据库,极大的提升开发效率
"""
# 去应用下的models.py中书写模型类
# 类 模型类
# 表 模型表
class UserInfo(models.Model):
# 当你没有创建主键字段的时候orm会自动帮你创建一个名为id的主键字段
uid = models.AutoField(primary_key=True)
# uid int primary key auto_increment
username = models.CharField(max_length=32)
# username varchar(32) CharField字段一定要书写max_length参数
password = models.IntegerField()
# password int
**************************数据库迁移命令*****************************
1.python3 manage.py makemigrations
# 将操作记录到小本本上(migrations文件夹内) 不能真正的直接操作数据库
2.python3 manage.py migrate
# 将操作真正的同步到数据库中
"""只要在models中书写了跟数据库相关的代码 就必须要重新执行上述两条命令"""
# pycharm简单快捷输入
tools
run manage.py task
自动提示
*******************************************************************
- 简单的orm语句
# 字段的增删改查
# 增
1.终端里面自己加默认值
2.null=True
3.default='666'
# 删
注释代码执行两条命令 (然后收拾行李跑路走人)
# 在操作models.py中的代码的时候一定要细心
# 改
修改代码执行两条命令
# 数据的增查
# 增
from app01 import models
1.create()
user_obj = models.UserInfo.objects.create(**kwargs)
# 改方法有一个返回值 就是当前创建的数据对象本身
2.对象.save()
# 先生成一个类对象
user_obj = models.User(**kwargs)
# 对象调用save方法
user_obj.save()
# 查
1.filter() # where
res = models.UserInfo.objects.filter(**kwargs)
"""
返回的结果是一个querySet对象 你可以把它看成是一个列表套数据对象
[数据对象1,数据对象2...]
支持索引和切片操作 但是不支持负数 并且不推荐你使用索引
.first()方法
filter括号内可以写多个参数 查询的时候默认是and关系
"""
今日内容概要
- django请求生命周期流程图(重要)
- 详细的讲django每一个部分的详细内容
- 路由层(urls.py)
- 无名分组
- 有名分组
- 反向解析
django请求生命周期流程图(必会)
# 每个人都要会画 这个图是你们后期复习django最好的一个梳理方式
# 扩展知识点
"""
缓存数据库
提前已经将你想要的数据准备好了 你来直接拿就可以
提高效率和响应时间
当你在修改你的数据的时候 你会发现数据并不是立刻修改完成的
而是需要经过一段时间才会修改
博客园
了解即可
"""
![b96d45b3847b0ed163d2ded58d3bce9b.png](https://i-blog.csdnimg.cn/blog_migrate/8eee66255c64814dac930638ffe76fdd.jpeg)
路由层
路由匹配
# 路由匹配
url(r'test',views.test),
url(r'testadd',views.testadd)
"""
url方法第一个参数是正则表达式
只要第一个参数正则表达式能够匹配到内容 那么就会立刻停止往下匹配
直接执行对应的视图函数
你在输入url的时候会默认加斜杠
django内部帮你做到重定向
一次匹配不行
url后面加斜杠再来一次
"""
# 取消自动加斜杠
settings.py里面写上:
APPEND_SLASH = False/True # 默认是自动加斜杠的
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 首页
url(r'^$',views.home),
# 路由匹配
url(r'^test/$',views.test),
url(r'^testadd/$',views.testadd),
# 尾页(了解)
url(r'',views.error),
]
无名分组
"""
分组:就是给某一段正则表达式用小括号扩起来
"""
url(r'^test/(d+)/',views.test)
def test(request,xx):
print(xx)
return HttpResponse('test')
# 无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数
有名分组
"""
可以给正则表达式起一个别名
"""
url(r'^testadd/(?P<year>d+)',views.testadd)
def testadd(request,year):
print(year)
return HttpResponse('testadd')
# 有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数
无名有名是否可以混合使用
"""
不能混用
但是同一个分组可以使用N多次
"""
# 单个的分组可以使用多次
url(r'^index/(d+)/(d+)/(d+)/',views.index),
url(r'^index/(?P<year>d+)/(?P<age>d+)/(?P<month>d+)/',views.index),
反向解析
# 通过一些方法得到一个结果 该结果可以直接访问对应的url触发视图函数
# 先给路由与视图函数起一个别名
url(r'^func_kkk/',views.func,name='ooo')
# 反向解析
# 后端反向解析
from django.shortcuts import render,HttpResponse,redirect,reverse
reverse('ooo')
# 前端反向解析
<a href="{% url 'ooo' %}">111</a>