一、静态文件配置

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入门的更多相关文章

  1. 【django入门教程】Django的安装和入门

    很多初学django的朋友,都不知道如何安装django开发以及django的入门,今天小编就给大家讲讲django入门教程. 注明:python版本为3.3.1.Django版本为1.5.1,操作系 ...

  2. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  3. python学习笔记--Django入门四 管理站点

    上一节  Django入门三 Django 与数据库的交互:数据建模 "管理员界面"是基础功能中的重要部分. django.contrib 包 Django自动管理工具是djang ...

  4. Django 入门

    Django 入门 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模型,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容 ...

  5. Django入门实践(三)

    Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...

  6. Django入门实践(二)

    Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...

  7. Django入门实践(一)

    Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...

  8. Django入门笔记

    Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有 ...

  9. Django 入门案例开发(上)

    Django 入门案例开发(中) http://www.cnblogs.com/focusBI/p/7858267.html Django是一个重量级的web开发框架,它提供了很多内部已开发好的插件供 ...

随机推荐

  1. TCP协议“三次握手”与“四次挥手”详解(上)

    在使用TCP协议进行数据的传输之前,客户端与服务器端需要建立TCP Connection,即建立连接,之后两端才能进行数据的传输. 下面堆TCP连接“三次握手”的过程进行说明. 1.相关概念 首先,我 ...

  2. UI 小白设计常用的Website

    网址 设计师导航网址(其实这个用好了,enough) 设计导航1 设计导航2 icon 阿里巴巴Iconfont flaticons icomoon Noun Project 图片(有时候就是灵魂) ...

  3. apache 2.4 httpd 2.4.6 反向代理后端的服务为HTTPS https 基于centos7

    需求场景:通过访问apache的http地址,反向代理访问后端的https服务,而且路径带有只能特定模块才反向代理 配置如下 listen <VirtualHost *:> #管理员邮箱 ...

  4. (四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)

    一.条件查询 1.含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询. 2.语法:(序号表示语句执行顺序) SELECT 字段名 ③ FROM 表名 ...

  5. 一个小小的即时显示当前时间的jqurey控件

    效果: <div class="nowTime"> <span></span>年 <span></span>月 < ...

  6. 油猴脚本 之 网教通直播评论记录抓取 v2.0

    先放一个 <油猴脚本 之 网教通直播评论记录抓取>那篇文章的传送门 . 修复内容 将所有表情转为 [符号表情] 字样,而非删除: 修复被禁言用户读取异常,现在被禁言用户表示为 张三 [已禁 ...

  7. mitmproxy的简单使用

    第1则 ---抓包工具mitmdump的使用--- 一.什么是抓包?怎么抓包? 1.抓包(packet capture)就是将网络传输发送与接收的数据包进行截获.重发.编辑.转存等操作,也用来检查网络 ...

  8. cheerio html方法中文被编码问题

    var $ = cheerio.load("<h1><p>你好</p><em>Hello,World!</em></h1&g ...

  9. Pytorch中的自动求梯度机制和Variable类

    自动求导机制是每一个深度学习框架中重要的性质,免去了手动计算导数,下面用代码介绍并举例说明Pytorch的自动求导机制. 首先介绍Variable,Variable是对Tensor的一个封装,操作和T ...

  10. Linux 虚拟机详细安装MySQL

    准备工作 下载MySQL 去官网下载MySQL:点我直达 百度云盘地址:链接: https://pan.baidu.com/s/1qBN4r6t8gvq-I4CFfQQ-EA 密码: hei3 检查L ...