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提供给客 ...
随机推荐
- Kali设置1920x1080分辨率
root@kali:~# xrandr --newmode -hsync +vsync root@kali:~# xrandr --addmode Virtual1 1920x1080 root@ka ...
- xen原理
目录:1. Xen的简介1.1 Xen的大体结构1.2 Xen对VM的称呼1.3 Xen对CPU和内存的虚拟化过程1.4 Xen对IO设备的虚拟化过程1.5 Linux Kernel对Xen的支持1. ...
- 【转】Cookie和Session和Cache
1 Cookie和Session Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力. Session可以用Cookie来实 ...
- poj 3069 Saruman's Army 贪心 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=3069 题解 题目可以考虑贪心 尽可能的根据题意选择靠右边的点 注意 开始无标记点 寻找左侧第一个没覆盖的点 再来推算既可能靠右的标记点为一 ...
- WPF 精修篇 DataGrid 筛选
原文:WPF 精修篇 DataGrid 筛选 DataGrid也可以分组 但是用的地方不多 就没写 筛选还是可以的 比如Datagrid数据量比较大 要做数据筛选 贴码 <DataGrid x: ...
- Mac下MongoDB配置与操作
1.环境配置 Xcode安装 2.下载安装包 官网地址是:MongoDB Download Center | MongoDB 3.解压文件, 将文件放置/usr/local 4.配置环境变量 open ...
- Win32 程序开发入门:一个最简单的Win32程序
一.什么是 Win32 Win32 是指 Microsoft Windows 操作系统的 32 位环境,与 Win64 都为 Windows 常见环境. 这里再介绍下 Win32 Applicatio ...
- 实用小工具:VNC的安装
安装xen时,需要使用vnc工具来进行图形化安装,安装好后启动失败,试了很多办法,最终解决. 1.使用yum安装:yum install tigervnc-server tigervnc-server ...
- IT兄弟连 HTML5教程 HTML5的学习线路图 第一阶段学习网页制作
学习HTML5技术可并不是简单学会几个新增的标签而已,HTML5现在可以说是前端所有技术的代名词.需要学习的语言和工具不仅多,对于刚接触他们的新人会感觉很乱.另外,前端开发也会细分很多个开发岗位,不同 ...
- Kubernetes之Pod使用
一.什么是Podkubernetes中的一切都可以理解为是一种资源对象,pod,rc,service,都可以理解是 一种资源对象.pod的组成示意图如下,由一个叫”pause“的根容器,加上一个或多个 ...