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开发框架,它提供了很多内部已开发好的插件供 ...
随机推荐
- 来看看阿里架构师Java 代码打日志姿势!你也是这样写的吗
使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一. 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能 ...
- 处理npm安装模块报错01
报错:Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/nodemon_tmp' 解决:sudo cnpm in ...
- Vue-Cli4.x配置文件路径别名
一.目录结构 二.配置方法 提示:和package.json同级新建vue.config.js文件(可选文件,默认没有创建). const path = require('path');//引入pat ...
- 00-04.kaliLinux-手动配置IP地址
在KaliLinux中手动配置网卡 用vim打开网卡的配置文件,配置各个网卡信息 root@kali:~# cd /etc/network root@kali:/etc/network# ------ ...
- Supervisor操作相关的进程
Supervisor是用Python开发的一个客户机/服务器系统,允许用户监视和控制UNIX类操作系统上的多个进程. 功能:用于监听.启动.停止.重启一个或多个进程. 当Supervisor管理的进程 ...
- 三星note8港版如何显示电量百分比呢?
设置-通知-状态栏,显示电量百分比打钩即可.
- ASP.NET Core 对Controller进行单元测试
单元测试对我们的代码质量非常重要.很多同学都会对业务逻辑或者工具方法写测试用例,但是往往忽略了对Controller层写单元测试.我所在的公司没见过一个对Controller写过测试的.今天来演示下如 ...
- Netty中的这些知识点,你需要知道!
一.Channel Channel是一个接口,而且是一个很大的接口,我们称之为“大而全”,囊括了server端及client端接口所需要的接口. Channel是一个门面,封装了包括网络I/O及相关的 ...
- Scrapy学习1:安装
Install Scrapy 熟悉PyPI的话,直接一句 pip install Scrapy 但是有时候需要处理安装依赖,不能直接一句命令就安装结束,这个和系统有关. 我用的Ubuntu,这里仅介绍 ...
- 多语言工作者の十日冲刺<8/10>
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第八天(05.07) 作业正文 ...