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开发框架,它提供了很多内部已开发好的插件供 ...
随机推荐
- SpringCloud+Ehcache
1.pom文件引入 <!-- https://mvnrepository.com/artifact/org.ehcache/ehcache --><dependency>< ...
- java实现简单的oss存储
oss 工作中需要用到文件上传,之前使用的是本地文件系统存储方式,后来重构为支持多个存储源的方式,目前支持三种方式:local.seaweedfs.minio 存储介质 seaweedfs seawe ...
- Jmeter环境部署
一.安装jdk 下载jdk 双击jdk-8u211-windows-x64.exe,默认下一步安装 我的电脑-属性-高级系统设置-环境变量 在“系统变量”出,新建”JAVA_HOME”,配置jdk的安 ...
- centos7 安装 jdk8
安装主要分为两种方式 linux中的yum命令 手动解压安装(自己下载官网jdk.tar.gz) yum 安装 可以使用yum -y list java*命令,查询可安装的版本.版本后面要带-deve ...
- filebeat v6.3 多行合并的步骤 多个表达式同时匹配
配置文件位于/etc/filebeat/filebeat.yml,就是filebeat的主配置文件打开文件filebeat.yml,搜索multiline:,默认是注释的,常用的有如下三个配置: mu ...
- 对于Python的GIL锁理解
GIL是什么 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可 ...
- 华为海思搞定4K60fps!Vmate掌上云台相机国内首发
目录 Snoppa Vmate Snoppa Vmate Snoppa Vmate是一款掌上型的高性能4K摄像机,集成了微型机械三轴增稳云台,一体化机身集成可操控式触摸屏,既可以独立使用,也可以无线连 ...
- Android笔记布局资源文件
在项目的res--layout目录下的文件叫布局资源文件,用于控制页面的布局显示 在Java代码中引用布局资源我们已经很熟悉了. setContentView(R.layout.activity_ma ...
- 基于web网站项目的性能测试结果分析
业务背景: 最近公司研发了一款对并发要求比较高的web项目,需要对其压力测试,模拟线上可能存在的问题,这个过程中遇到一些很多问题,这里重新梳理一下思路,希望能给遇到同样问题的小伙伴提供一个参考. 工具 ...
- async/await剖析
async/await剖析 JavaScript是单线程的,为了避免同步阻塞可能会带来的一些负面影响,引入了异步非阻塞机制,而对于异步执行的解决方案从最早的回调函数,到ES6的Promise对象以及G ...