Django 之day02,必会知识点
静态文件配置*******
为什么用户在浏览器中输入的网址能够访问到对应的资源,
前提是后端提前开设该资源的访问,在urls.py文件中进行配置该路由,
如果我的后端没有开设相关的资源,用户是无法访问到的。
1.默认情况下所有的html文件都是放在templates文件夹内
2.什么是静态文件
网站所使用到的提前写好的css js 第三方模块 图片都叫做静态资源
3.默认情况下网站所用到的静态文件资源全部放在static文件夹下。
通常情况下,在static文件夹内部还会再建其他文件夹
css 文件夹
js 文件夹
font 文件夹
img 文件夹
为了更加方便的管理文件
django中,需要手动创建static文件夹
4.静态文件动态绑定----重点!!!
{%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>
5. #访问静态资源文件接口前缀,通常情况下接口前缀的名字是static
STATIC_URL = '/xxx/'
#例如通过 http://127.0.0.1:8000/xxx/a.txt查找a.txt文件
#手动配置静态文件访问资源
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
os.path.join(BASE_DIR,'static1')
os.path.join(BASE_DIR,'static2')
#多个配置文件,查找顺序,自上向下依次查找,找到就结束
]
6.
form表单默认是get请求
get请求也能够携带参数
http://127.0.0.1:8000/login/?username=jjjjksk & password=123
特点:url?xxx=xxxx & yyyy=yyyy
1.携带的数据不够安全
2.携带的数据大小有限制 ,最大好像应该差不多是4kb左右
3.通常只会携带一些不是很重要的数据
7.post请求会出现403,需要注释settings中下面的中间件
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',
]
8.
<form action="" method="">默认处理的是get请求,
get请求指向拿到login页面
post请求向后端提交数据,然后后端做校验
9.如何判断当前请求方式???
request.method获取请求的方式
拿到的是字符串大写的请求方式 GET POST
print(request.method,type(request.method))
打印:GET <class 'str'>
def login(request):
# print('来了,小老弟')
# print(request.method,type(request.method))
if request.method=='post':
print(request.method)
return HttpResponse('昂首挺胸')
print(request.method)
return render(request,'login.html')
'''
视图函数都必须有返回值,
并且返回值都是HttpResponse对象
'''
10.request方法初始
request.method 获取请求方式,并且纯大写的字符串
print(request.POST) 获取用户提交的post请求数据
如何获取用户数据*********
request.POST.get() #默认只会获取列表最后一个元素
request.POST.getlist() #如果你想获取列表,用getlist()方法
print(request.GET) 获取用户提交的GET请求数据
如何获取用户数据*********
request.GET.get() #默认只会获取列 表最后一个元素
request.GET.getlist() #如果你想获取列表,用getlist()方法
11.pycharm连接数据库,如果最右侧没有显示database的话,可以在settings中配置
settings --> Plugins --> Database Tools and SQL(推荐右侧的全部勾选上)
12.django连接MySQL***********
必须要有两步操作
1.在settings中找到DATABASES,然后把default中的配置修改为对应mysql的信息
需要注意的是default中的key值都需要是全大写。
原始的 DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
改后的 DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day49',
'USER':'root',
'PASSWORD':'root',
'HOST':'127.0.0.1',
'PORT':3306,
'CHARSET':'utf8'
}
}
2.主动告诉django 不要用默认的mysqldb连接,而是用pymysql
你可以在项目名下的__init__.py中书写
也可以在应用名下的__init__.py中书写
书写内容是:
import pymysql
pymysql.install_as_MySQLdb()
13.django orm简介
orm 对象关系映射
类 --- 表
对象 --- 数据
对象.属性 --- 字段对应的值
为什么使用orm?
能够让不会数据库操作的人也能够简单方便去操作数据库
orm的缺点:
封装程度太高,有时候会出现查询效率偏低的问题
所以工作中:
简单的用orm
复杂的追求速度的,需要你手动书写sql语句
14.django中如何操作orm?
书写模型类
去应用下的models.py中书写模型类
注意事项:
之后在写django项目的时候,一个django项目对应一个数据库,
不要出现多个项目使用同一个数据库的情况*************
15.*****************数据库迁移(同步)命令********************************
1.python manage.py makemigrations 将数据库的修改,记录到migrations文件中
2.python manage.py migrate 将修改操作真正的同步记录到数据库中
注意事项:
1.这两条命令是同步进行的,成双成对,缺一不可
2.只要修改了models里面和数据库相关的代码,你就必须重新执行上面的两条命令
个人建议:
只要你离开了你的电脑,你就顺手锁屏,锁屏快捷键是 Windows+L 锁屏
*************************************************************************
16.模型表字段的增删改查
class User(models.Model):
username = models.CharField(max_length=255)
password = models.IntegerField()
email = models.EmailField()
注意事项:
字段:email = models.EmailField()
该字段需要设置默认值,或者该字段允许为空,两种方式需要选择一个
方式1 设置默认值
email = models.EmailField(default='123@qq.com')
方式2 设置为空
email = models.EmailField(null=True)
注意:email虽然之前设置了默认值 default='123@qq.com' 后面又修改为 null=True,
但是仍然对之前设置过的email字段没有任何影响的
phone = models.BigIntegerField(null=True)
方式3 直接根据他的提示设置默认值
gender
'''
E:\Python jieshiqi\11月份练习考试\day50>python manage.py makemigrations
1) Provide a one-off default now (will be set on all existing ro
ws with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option: 1 #######此处做出自己的选择,1设置默认值,2退出设置默认值
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so
you can do e.g. timezone.now
Type 'exit' to exit this prompt
>>> 'male' #######此处设置默认值,注意要有引号
Migrations for 'app01':
app01\migrations\0005_auto_20191123_2054.py
- Add field gender to user
- Alter field email on user
E:\Python jieshiqi\11月份练习考试\day50>python manage.py migrate
###不要忘记提交数据到数据库
'''
注意事项,字段的删除谨慎使用,因为对应字段都已经有了数据,删除后不可恢复(如同删库跑路)
删除字段email、phone、gender:
# email = models.EmailField(default='123@qq.com')
# phone = models.BigIntegerField(null=True)
# gender = models.CharField(max_length=64)
删除字段的方法:
直接注释对应字段的代码 +python manage.py makemigrations + python manage.py migrate
17.模型表数据的增删改查****************
查:
data = models.User.objects.filter(username=username)
print(data) #<QuerySet [<User: User object>]>
'''
filter 返回的结果是一个列表,里面才是真正的数据对象
filter 括号内可以放多个关键字参数,这多个关键字参数在查询的时候是and的关系不是or的关系
'''
user_list=models.User.objects.all() #查询出所有
print(user_list) #列表里面有4个对象<QuerySet [<User: User object>, <User: User object>, <User: User object>, <User: User object>]>
#对象被打印会执行__str__方法
增:
user_obj=models.User.objects.create(username=username,password=password)
print(user_obj,user_obj.username,user_obj.password)
#create方法会有一个返回值,返回值就是当前被创建的对象本身(如上面的user_obj)
改:
#修改数据库中的数据
#sql语句:update User set username='jsdnn',password='123' where id=1;
models.User.objects.filter(id=edit_id).update(username=username,password=password) #修改完毕
'''
上面的更新语句属于批量操作,会将filter查询出来的列表中所有的对象全部更新
更新之后,重定向到用户列表页面
由于更新重要,所以我拷贝了一份完整的代码,以供查阅
def edit_user(request):
'''
返回编辑页面,编辑页面要含有用户的原来数据,提交后,保存数据到数据库
问题:
1.如何获取用户想要编辑的对应ID数据呢?
利用get请求携带参数的方式,获取用户想要编辑的数据id值
edit_id=request.GET.get('edit_id')
2.如何查询出来要编辑的数据
将用户想要编辑的数据查询出来,展示到编辑页面上,供用户修改
edit_obj=models.User.objects.filter(id=edit_id)[0] #支持索引取值,也支持切片操作,但是不支持负数
edit_obj=models.User.objects.filter(id=edit_id).first()
上面两行代码是同一个意思,查询出对应id的数据
return render(request,'edit_user.html',{'edit_obj':edit_obj})
:param request:
:return:
'''
edit_id = request.GET.get('edit_id')
if request.method == 'POST':
username=request.POST.get('username')
password=request.POST.get('password')
#修改数据库中的数据
#sql语句:update User set username='jsdnn',password='123' where id=1;
models.User.objects.filter(id=edit_id).update(username=username,password=password) #修改完毕
'''
上面的更新语句属于批量操作,会将filter查询出来的列表中所有的对象全部更新
更新之后,重定向到用户列表页面
'''
return redirect('/userlist/')
edit_obj = models.User.objects.filter(id=edit_id).first()
return render(request,'edit_user.html',{'edit_obj':edit_obj})
删:
#直接删除
models.User.objects.filter(id=delete_id).delete()
'''
批量操作,会将filter查询出来的列表中所有的对象全部删除
'''
注意事项:
password = models.CharField(max_length=64)
修改字段类型以后,必须下面的password由整形修改为varchar类型,也是需要提交这两句命令的
python manage.py makemigrations
python manage.py migrate
然后数据库中的对应字段类型,才会从整形修改为字符串类型
Django 之day02,必会知识点的更多相关文章
- [新手必备]Python 基础入门必学知识点笔记
Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...
- java数据库学习路线和必学知识点!
java数据库必学知识点! 分享一下数据库的学习路线和必学的知识点! 掌握mysql,Oracle在各个平台上的安装及使用 Mysql数据库基础 mysql概述.优点.运行原理及内存结构 mysql数 ...
- Django学习day02随堂笔记
每日测验 """ 今日考题 1.谈谈你对web框架的认识,简述web框架请求流程 2.python三大主流web框架的区别 3.安装django需要注意的事项有哪些(最少 ...
- MySQL面试必考知识点:揭秘亿级高并发数据库调优与最佳实践法则
做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟 ...
- Django ORM 操作 必知必会13条 单表查询
ORM 操作 必知必会13条 import os # if __name__ == '__main__': # 当前文件下执行 os.environ.setdefault('DJANGO_SETTIN ...
- linux驱动工程面试必问知识点
linux内核原理面试必问(由易到难) 简单型 1:linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? 2:linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化, ...
- 精选Spring Boot三十五道必知必会知识点
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家.本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spr ...
- django面试题必知
Django的Model的继承有几种形式,分别是什么?(私信小编001 .002 .003 .007任何一个即可获取Python学习资料) 一.抽象继承: 这种继承的定义方法如下: 上例中,我们的Hu ...
- django面试题必问
1.谈谈你对http协议的认识. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使 ...
随机推荐
- 更换JDK
1.更换JDK 1).卸载原有jdk 检查一下系统中的jdk版本 java -version 显示 java version "1.6.0_24" OpenJDK Runtime ...
- 🙀Java 又双叒叕发布新版本,这么多版本如何灵活管理?
文章来源:http://1t.click/bjAG 前言 不知不觉 JDK13 发布已有两个月,不知道各位有没有下载学习体验一番?每次下载安装之后,需要重新配置一下 Java 环境变量.等到运行平时的 ...
- devicemapper存储驱动下镜像的存储
docker配置devicemapper存储驱动 #查看当前使用的存储驱动,默认为overlay docker info | grep -i storage #停止dockersystemctl st ...
- 性能测试:深入理解线程数,并发量,TPS,看这一篇就够了
并发数,线程数,吞吐量,每秒事务数(TPS)都是性能测试领域非常关键的数据和指标. 那么他们之间究竟是怎样的一个对应关系和内在联系? 测试时,我们经常容易将线程数等同于表述为并发数,这一表述正确吗? ...
- JavaScript笔记七
1.函数 - 返回值,就是函数执行的结果. - 使用return 来设置函数的返回值. - 语法:return 值; - 该值就会成为函数的返回值,可以通过一个变量来接收返回值 - return后边的 ...
- <编译原理 - 函数绘图语言解释器(2)语法分析器 - python>
<编译原理 - 函数绘图语言解释器(2)语法分析器 - python> 背景 编译原理上机实现一个对函数绘图语言的解释器 - 用除C外的不同种语言实现 设计思路: 设计函数绘图语言的文法, ...
- Kibana笔记
• 根据id查询 GET index_1/doc/1 • 全文检索 GET index_1/doc/_search GET index_1/doc/_search{ "query" ...
- Centos 6.x Openssh 升级 7.7p1 版本
OpenSSH 升级 目前在一家金融公司上班,正好赶上金融公司各种暴雷,本人心里慌慌的. 然后就是金融公司要进行的最低的三级等保评测,各种修改系统安全,密码强度.WAF.防火墙等各种. 评测公司对我司 ...
- 限定某个目录禁止解析php、限制user_agent、php相关配置
6月1日任务 11.28 限定某个目录禁止解析php11.29 限制user_agent11.30/11.31 php相关配置扩展apache开启压缩 http://ask.apelearn.com/ ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(8)- 从Serial(1-bit SPI) NOR恢复启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的1-bit SPI NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启动的 ...