day60 django入门
一、静态文件配置
1 引子
在写项目的时候我们默认把html文件放在templates文件夹下,网站所使用的静态文件放在static文件夹下
静态文件:
前端已经写好的直接调用的文件,jQuery,js,css,框架,图片。。
文件目录分级:
-项目文件
--static
---js
---css
---img。。其他
在浏览器中输入具体url的时候,能看到资源是因为我们在后端提前开设了该资源的接口,如果访问不到这个资源,说明后端没有开放这个资源。
就比如,现在我们没有配置静态文件,在前端就无法访问它的路径,也就无法渲染到页面上。
2 如何配置
小技巧:
当我们在写django项目的时候可能出现修改了代码但是前端的页面没有出现变化的情况:
- 在同一个端口开了好几个django项目(只会运行一个)
- 浏览器缓存的问题
- 浏览器settings>network>disable cache 勾上,刷新的时候就会清除缓存了
1 在settins.py中的具体配置
STATIC_URL = '/static/' # 类似于访问静态文件的令牌,可以修改
"""如果你想要访问静态文件 你就必须以static开头"""
"""
/static/bootstrap-3.3.7-dist/js/bootstrap.min.js
/static/令牌
为什么吗要有令牌?
因为我们项目下的文件可能有很多,我们要去访问具体的文件就要去拼接路径,拿到令牌等于拿到一个可以去访问路径列表的途径,在前端显示的static并不是路径而是令牌,令牌掩盖了这一层所有的拼接路径。
bootstrap-3.3.7-dist/js/bootstrap.min.js
都没有才会报错
"""
# 静态文件配置,放了一堆项目根目录下的文件路径,取得令牌的路径会在这里一一匹配
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'),
os.path.join(BASE_DIR,'static1'),
os.path.join(BASE_DIR,'static2'),
]
2 静态文件的动态解析(html页面中)
1 按照路径
<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>
2 动态解析(这种方法下,令牌怎么变都不会影响)
{% load static %} 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>
tips1:
form表单默认是get请求数据,问好后面的数据只是用于传递不会访问具体的页面
复习form表单中action参数:
1 不写,默认向当前所在的url提交数据
2 全写,朝指定url提交数据
3 只写后缀,/login/ 拼接当前url
tips2:
# 前期在使用django提交post请求的时候,需要在配置文件中注释一条代码
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对象方法初识
request.method # 返回请求方式 并且是全大写的字符串形式 <class 'str'>
request.POST # 获取用户post请求提交的普通数据不包含文件 <QueryDict: {'username':["123"]}>
request.POST.get() # 只获取列表最后一个元素
request.POST.getlist() # 直接将列表取出
request.GET # 获取用户提交的get请求数据
request.GET.get() # 只获取列表最后一个元素
request.GET.getlist() # 直接将列表取出
tips:get请求是有数据大小限制的,post没有
在同一个函数下,不同的请求应该有不同的处理机制
三、pycharm链接数据库(mysql)
提前在mysql中创建好数据库,在pycharm中点开database的加号,找到mysql进行配置即可

在点ok之前先测试一下是否能链接
四、django链接数据库(mysql)
django默认用的数据库是sqlite3,在settins中有对应的配置信息
settings.py
# 默认用的是sqkite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# django链接MySQL
1.第一步配置文件中配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day60',
'USER':'root',
'PASSWORD':'root',
'HOST':'127.0.0.1',
'PORT':3306,
'CHARSET':'utf8'
}
}
'''
django中默认用的是mysqldb模块链接mysql,但是这个模块兼容性不好,我们可以手动改为pymysql链接。
在项目名下的init或者任意app下的init书写以下代码
'''
五、django orm
orm:对象关系映射
python 数据库
类 = 表
对象 = 记录
对象属性 = 记录某个字段对应的值
作用:能够上一个不用sql语句的人能通过python面向对象的代码检查的操作数据库
不足:封装程度太高,有时候sql的效率低,需要自己写sql语句
model.py
class Author(models.Model):# 必须继承models.Model 固定写法
# 由于一张表中必须有一个主键字段,所以orm在我们没用定义主键的时候,自动帮我们创建了一个id字段作为主键。以后主键字段都可以忽略不写。
# username varchar(32)
username = models.CharField(max_length=32)
# password int
passowrd = models.IntegerField()
重点!!!数据迁移
当我们对model里的代码进行操作的时候(增删改一个字段),都需要进行数据迁移
python manage.py makemigrations (讲操作记录添加到一个文件中)migrations
python manage.py migrate 将操作真正的同步到数据库中
1 字段的增删改查
# orm创建字段的时候,会默认设置成非空,所以我们在添加一个字段的时候,如果没有设置默认值或者修改非空的属性,就会在终端出现选择条件去修改这个字段
# 字段增加
1.终端直接给出默认值
2.设定该字段可以为空
info = models.CharField(max_length=32,verbose_name='个人简介',null=True)
3.直接给出默认值
hobby = models.CharField(max_length=32,verbose_name='兴趣爱好',default='study')
# 字段的修改
直接修改代码即可
# 字段的删除
直接删除代码即可
# 注意:以上的操作结束后都需要数据迁移
2 数据的增删改查
# 查
# user_obj = models.Author.objects.filter(username=username).first()
# 找到username匹配的第一个用户数据对象,不加first找到的是queryset对象
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user_obj = models.Author.objects.filter(username=username).first()
print(password,user_obj.password)
if user_obj:
if password == user_obj.password:
return HttpResponse('登录成功')
return HttpResponse('密码错误')
return HttpResponse('用户不存在')
return render(request, 'login.html')
# 增
# 第一种增的方式,orm创建数据对象,有一个数据对象的返回值,和上面查出来的一样
# models.Author.objects.create(username=username,password=password)
# 第二种增的方式,用的是Author类实例化对象的方式,然后保存对象
# user_obj = models.Author(username=username,password=password)
# user_obj.save()
def reg(request):
if request.method =='POST':
username = request.POST.get('username')
password = request.POST.get('password')
# models.Author.objects.create(username=username,password=password)
user_obj = models.Author(username=username,password=password)
user_obj.save()
return render(request, 'register.html')
day60 django入门的更多相关文章
- 【django入门教程】Django的安装和入门
很多初学django的朋友,都不知道如何安装django开发以及django的入门,今天小编就给大家讲讲django入门教程. 注明:python版本为3.3.1.Django版本为1.5.1,操作系 ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- python学习笔记--Django入门四 管理站点
上一节 Django入门三 Django 与数据库的交互:数据建模 "管理员界面"是基础功能中的重要部分. django.contrib 包 Django自动管理工具是djang ...
- Django 入门
Django 入门 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模型,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容 ...
- Django入门实践(三)
Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...
- Django入门实践(二)
Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...
- Django入门实践(一)
Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...
- Django入门笔记
Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有 ...
- Django 入门案例开发(上)
Django 入门案例开发(中) http://www.cnblogs.com/focusBI/p/7858267.html Django是一个重量级的web开发框架,它提供了很多内部已开发好的插件供 ...
随机推荐
- Mybatis反射修改SQL值
Mybatis反射修改SQL值 某一些情况下我们需要动态的改变Mybtis的执行的sql语句,有两种方法:1)使用拦截器,2)使用反射,拦截器的比较简单点,这里使用反射实现一次,有一点小坑,记录一下: ...
- 02-Python基础1
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- 别让HR再质问我:我费劲招的人,你用缓存问废了,不能简单点?
概念 缓存穿透 在高并发下,查询一个不存在的值时,缓存不会被命中,导致大量请求直接落到数据库上,如活动系统里面查询一个不存在的活动. 缓存击穿 在高并发下,对一个特定的值进行查询,但是这个时候缓存正好 ...
- .Net Core WebAPI + Axios +Vue 实现下载与下载进度条
故事的开始 老板说:系统很慢,下载半个小时无法下载,是否考虑先压缩再给用户下载? 本来是已经压缩过了,不过第一反应应该是用户下的数量多,导致压缩包很大,然后自己测试发现,只是等待的时间比较久而已,仍然 ...
- IDEA自定义模板
RT,虽然看起来简单,每当配置新的IDEA 时,又不免度娘,所以整理下 1.类的模板 路径: settings-Editor-File and Code Templates 右侧找到 class 添加 ...
- abp-CMS模块-广告
无论是开发app还是网站,可能都需要一个广告功能,比如我们常见的在首页有个轮播广告,里面会轮播显示多个图片.还有比如一个新闻门户网站 很常见的 banner横幅广告,还有js特效广告等.本篇说说在ab ...
- EPLAN文本输入怎么转行,路径功能文本换行方法
EPLAN文本输入怎么转行,路径功能文本换行方法 在输入文本时,按CTRL+ENTER可以将字体换行 Ctrl+回车键
- Linux 集群安装zookeeper
系统:CentOs 7 环境:jdk 8 Zookeeper 下载地址: http://www-eu.apache.org/dist/zookeeper/stable/ 上传至服务器并解压,本人放在 ...
- 深度解剖dubbo源码---01dubbo的架构原理-探索.mp4
02内核解剖-dubbo自己的SPI实现.mp4 https://blog.csdn.net/prestigeding/article/details/80795708 https://segment ...
- TestNG学习笔记新的
1.参考官方文档https://www.yiibai.com/html/testng/2013/0915300.html package com.cib.testng; import org.test ...