day52_9_16Django中的静态文件和orm
一。静态文件配置
在配置静态文件时,需要创建一个文件夹在Django项目文件夹下,名字与使用无关。
静态文件包括html等使用的不会变动的插件文件等。分为三个部分:
css文件夹 当前网站所有的样式文件
js文件 当前网站所有的js文件
img文件 当前网站所有的图片文件
其他(前端框架代码)。
1.在静态文件的调用时,不能直接在html文件夹中使用相对路径或绝对路径进行调用,因为在页面访问的时后不会获取到该插件资源,所以需要将所有静态文件暴露给访客,使得访客可以获得。
在Django中可以使用以下代码进行资源暴露:
STATIC_URL = '/static/' # 这个static不是文件夹的名字 而是接口前缀
"""只要你想访问静态文件中的资源 文件路径就必须用static开头""" STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'), # 真正的文件夹路径
os.path.join(BASE_DIR,'static1'), # 真正的文件夹路径
os.path.join(BASE_DIR,'static2'), # 真正的文件夹路径
os.path.join(BASE_DIR,'static3') # 真正的文件夹路径
]
这样在html文件中调用静态文件就需要以STATIC_URL中的参数为地址头,框架会自动在STATICFILES_DIRS路径中的所有文件夹中遍历,找到该文件的资源位置。
<link rel="stylesheet" href="/xxx/bootstrap-3.3.7-dist/css/bootstrap.min.css">
<script src="/xxx/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
其中xxx可以是任意字符,只要和STATIC_URL中的地址符合即可。如果STATIC_URL中的值变动,需要对所有html中的值进行修改,如果需要一劳永逸的方法,可以使用加载静态符:
{% 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>
load static就是加载一个静态符号。
二。form表单提交方式.
一般的,网页提交数据的方法有两种:GET 和POST,他们取决与前端form表单中 的methon中的值。
get请求方法一般是要请求页面资源时使用,它所提交的数据会暴露在url后面,所以一般提交数据使用的都是post方法。
在django中,视图函数会接受到一个request参数,这个参数会将请求的方法返回给后端,端可以通过次方法识别请求数据的类型,因为对与请求页面来说请求方法时get而提交数据需要使用post。语法如下
def login(request):
if request.method == 'GET':
return render(request, 'login.html')
print('1111')
print(request.POST)
return HttpResponse('收到了!')
注意,在前期学习django时,涉及到post方法的时候会报错403,为了避免这个错误,需要修改框架settings中的数据:
改成post请求之后 需要去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',
]
request是一个对象:<WSGIRequest: POST '/login/'>
其中可以对其取值POST和GET,这两个数据类型是QueryDict,是一个类似于字典类型,可以满足字典的所有取值方法。
通过request.POST.get('参数名')来取得对应的值。取出的值是str类型
也可以通过request.POST['参数名']来获取值,但不推荐使用这个方法。
返回的是一个字典加列表的形式,因为可能出现一个参数名对应多个值的情况出现
<QueryDict: {'username': [''], 'password': [''], 'tj': ['登录']}>
如果对一个有多个值的列表使用get取值只会取到最后一个这个值,所以对于有多个值的参数使用getlist方法。取出的值类型是list。
request.GET.getlist('hobby')
三。django数据库配置。
django使用的默认数据库是sqlite,如果要使用其他数据库,需要在settingts中配置文件DATABASES,将他配置为mysql的数据库所需要的资源:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day51',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'',
'CHARSET':'utf8'
}
而此时django使用的连接数据库的模块还是mysqldb,要让他改为pymysql进行连接,需要在项目的初始化或者app的初始化中将其修改,:
import pymysql
pymysql.install_as_MySQLdb()
pycharm中也有自带的处理数据的功能:
选择mysql进行配置。第一次配置需要下载一个控件:
安装后即可使用。
四。django中的orm
之前的自制的简易orm中有以下对应关系。
表==》类
表中的记录=》类创建的对象
字段中每个记录的值=》对象中的属性
所以可以创建一个类作为一个表:
class User(models.Model):
# 将id字段设置为User表主键字段 在django orm中 你可以不写主键字典 django会默认给你的表创建一个名为id的主键字段
id = models.AutoField(primary_key=True) # 一旦你自己指定了主键字段 那么django就不会自动再帮你创建了
username = models.CharField(max_length=32)
# username varchar(32) CharField必须要指定max_length参数
password = models.IntegerField() # password int
其中django会自己给你定义一个主键,如果你的表中没有主键,名为id
再每次数据表变动之后都需要进行迁移(同步)命令才能更新数据库中的表。
在cmd中执行以下命令:
python3 manage.py makemigrations
仅仅是在小本本上(migrations文件夹)记录数据库的修改 并不会直接操作数据
python3 manage.py migrate
将数据库修改记录 真正同步到数据库。
每当models中的数据库相关代码改变后,就需要执行以上的代码进行修改数据库。
在控制台也有简写法:
makemigrations
migrate
五。字段的增删查改:
增
如果表被创建出来之后,后期还想添加新的字段,有两种方法。
如果直接强行添加新字段而不执行1,2操作的话,系统会出现以下提示
You are trying to add a non-nullable field 'addr' to user2 without a default; we can't do that (the database needs
something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
就是这个字段没有给定初始值,不能作为字段添加,这是为了防止原有的表中有相关数据,需要给定一个初始值,解决方法如下:
1.给行动字段设置默认值。
addr=models.CharField(max_length=32,default='China')
# default该字段默认值
2.设置新的字段可以为空。
age = models.IntegerField(null=True)
# 该字段允许为空
删:
删除字段 直接在models.py中注释该字段 然后重新执行两条命令即可。
注意:执行完之后 表中该字段所对应的所有的数据全部删除。
并且一般情况下 基本是不会用到真正意义上的删除。
六。数据的增删查改:
首先需要导入models模块
查:
查询所有数据:
models.User.objects.all() # 直接拿所有的数据
查询数据的方法有两种:
1:使用get方法:
user_obj = models.User.objects.get(username=username) # select * from user where username='jason'
这种方法得出的obj就是对象本身,但是不推荐使用这个方法,当对象不存在时,会报错。
2.filter:
res = models.User.objects.filter(username=username,password=password)
filter方法拿到的是一个QUERYSet对象,而我们可以通过以下方法获取其中的sql语句:
res.query
#SELECT `app01_user`.`id`, `app01_user`.`username`,
`app01_user`.`password`
FROM `app01_user`
WHERE (`app01_user`.`username` =
jason AND `app01_user`.`password` = 123)
其操作方法和列表相差无几,
可以支持正索引取值,不支持负索引取值。不推荐使用。
可以支持正切片,也不推荐使用。
推荐使用first方法,取出其中的第一个值:
user_obj = models.User.objects.filter(username=username).first()
其内部就是通过索引取值,当列表为空时会返回一个NONE,所以在后续的操作可以判断obj是否为空。
增:
数据有两种方式可以增加:
1.通过create函数:
models.User.objects.create(username=username,password=password)
create方法能够新增数据 并且有一个返回值。返回值就是新增的数据对象本身
2.通过创建一个对象加保存的方法。
user_obj = models.User(username=username,password=password)
user_obj.save()
推荐使用第一种方法,因为第二种方法效率太低
删:
删除功能需要获取对象中的id,所以可以在删除按钮中添加id,后端可以通过GET方法取出:
/del_user/?id={{ user.id }}
然后删除:
models.User.objects.filter(id=delete_id).delete()
# delete from user where id = delete_id;
改:
和删除功能差不多,需要获取修改id,然后再对其进行修改,其中注意的是:
无论post和get都可以获取url后面的get请求。
方法1:
models.User.objects.filter(id=edit_id).update\
(username=username,password=password)
filter拿到是一个列表,filter操作其实都是批量操作。 如果filter结果列表中有多个数据,那么会一次性全部修改,类似于for循环一个个修改。
方法2:
对对象中的所有字段进行修改,然后保存(不推荐使用):
edit_obj.username = username
edit_obj.password = password
edit_obj.save()
第二种方式会从头到尾将所有的字段全部修改一遍 效率极低。
day52_9_16Django中的静态文件和orm的更多相关文章
- Django基础二静态文件和ORM
Django基础二静态文件和ORM 目录 Django基础二静态文件和ORM 1. 静态文件 1.1 静态文件基本配置: 1.2 静态文件进阶配置 2. request参数 3. Django配置数据 ...
- 霸气!Nginx 中缓存静态文件秘籍
导读 这篇教程说明你应该怎样配置 nginx.设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片. CSS 和 Javascript 文件)设 ...
- 『vue踩坑日常』 在index.html中引入静态文件不生效
Vue日常踩坑日常 -- 在index.html中引入静态文件不生效问题 本文针对的是Vue小白,不喜勿喷,谢谢 出现该问题的标志如下 控制台warning(Resource interpreted ...
- 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!
擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...
- 【jsp】怎么在jsp文件中引入静态文件(.js .css)
如果在jsp文件中引入静态文件比如(.js或.css等等),可以在使用 /项目名称/路径 的方式,但是这种方式如果在修改了项目了名称后就显得比较麻烦了.除了之外还许多方式,比如相对路径等等.一般情况下 ...
- Flask初级(四)flash在模板中使用静态文件
Project name :Flask_Plan templates: 默认设置下,Flask在程序根目录中名为static的子目录中寻找静态文件. 随便找个图片放进去把,命令test.png Fla ...
- Django中对静态文件的支持(转)
英文原文:[http://agiliq.com/blog/2013/03/serving-static-files-in-django/] 译文:[http://segmentfault.com/a/ ...
- 在express中提供静态文件笔记
在express中提供静态文件 要在express框架中提供静态文件,如:css.javascript等文件,就要使用到他的内置中间件功能express.static,将包含静态文件目录文件传递给ex ...
- (5)ASP.NET Core 中的静态文件
1.前言 当我们创建Core项目的时候,Web根目录下会有个wwwroot文件目录,wwwroot文件目录里面默认有HTML.CSS.IMG.JavaScript等文件,而这些文件都是Core提供给客 ...
随机推荐
- 005.MongoDB索引及聚合
一 MongoDB 索引 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常低的,特别在处 ...
- 【转载】Spring学习(1)——快速入门--2019.05.19
原文地址:https://www.cnblogs.com/wmyskxz/p/8820371.html 认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念 ...
- java8-07-方法引用总结
一:方法引用 如果Lambda体中的内容 已经有方法实现了 我们可以使用"方法引用" (可以理解为 ...
- 201871010108-高文利《面向对象程序设计(java)》第一周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ...
- 《大数据技术应用与原理》第二版-第二章大数据处理架构Hadoop
2.1概述 Hadoop是Apache旗下的开源分布式计算平台,是基于Java开发的,具有很好的跨平台特性,其中核心文件是MapReduce和HDFS,而HDFS是根据谷歌文件系统GFS开源实现,是面 ...
- python学习(day1-2)
python 学习(day - 1-2 ) 变量:将运算的中间结果暂存到内存,以便后续程序调⽤. 变量的命名规则: 1, 变量由字⺟, 数字,下划线搭配组合⽽成 2, 不可以⽤数字开头,更不能是全数字 ...
- 【Java线程与内存分析工具】VisualVM与MAT简明教程
目录 前言 VisualVM 安装与配置 本地使用 远程监控 MAT 使用场景 安装与配置 获得堆转储文件 分析堆转储文件 窥探对象内存值 堆转储文件对比分析 总结 前言 本文将简要介绍Java线程与 ...
- Python爬虫实践~BeautifulSoup+urllib+Flask实现静态网页的爬取
爬取的网站类型: 论坛类网站类型 涉及主要的第三方模块: BeautifulSoup:解析.遍历页面 urllib:处理URL请求 Flask:简易的WEB框架 介绍: 本次主要使用urllib获取网 ...
- sql server相邻表记录交换(单双两两交换)
在博客园的博问中看到了一个这样的提问:一个表中有id和name两个字段,id是连续非空不重复的,想要交换相邻表记录的name值(单双两两交换). 另外,如果最后的单独行没有对应的下一行匹配记录的话,就 ...
- 下载文件旁边附的MD5/SHA256等有什么用途?
在我们下载很多软件时,旁边会出现md5,sha1/sha256/sha512等一长串字符串,这些字符串是什么意义呢? 因为怕盗版或者怕软件被植入病毒或者插件等,要对软件的完整性做校验.步骤:先下载完软 ...