一、静态文件配置
我们将html文件默认都放在templates文件夹下
我们将网站所使用的静态文件默认都放在static文件夹下
1.静态文件
前端已经写好了的 能够直接调用使用的文件
网站写好的js文件
网站写好的css文件
网站用到的图片文件
第三方前端框架
...
拿来就可以直接使用的
django默认是不会自动帮你创建static文件夹,需要你自己手动创建
一般情况下我们在static文件夹内还会做进一步的划分处理
-static
--js
--css
--img
其他第三方文件
在浏览器中输入url能够看到对应的资源
是因为后端提前开设了该资源的借口
如果访问不到资源说明后端没有开设该资源的借口
http://127.0.0.1:8000/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
2.静态文件配置
当你在写django项目的时候可能会出现后端代码修改了但是前端页面没有变化的情况
1.你在同一个端口开了好几个django项目
一直在跑的其实是第一个django项目
2.浏览器缓存的问题
tsettings
network
disable cache勾选上
STATIC_URL= '/ooo/' #类似于访问静态文件的令牌
""如果你想要访问静态文件 你就必须以static开头""
/static/bootstrap-3.3.7-dist/js/bootstrap.min.js
/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'),
}
静态文件动态解析
{% 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>
3.form表单
form表单默认是以get请求提交数据的
http://127.0.0.1:8000/login/?username=admin&password=123
form表单action参数
1.不写 默认朝当前地址提交数据
2.全路径
3.后缀(/index)
提交post请求的时候 需要先去配置文件中注释掉一行(中间件)
二、request对象
request.method #返回请求方式,并且是全大写的字符串形式<class 'str">
request.POST #获取用户post请求提交的普通数据不包含文件
request.POST.get() #只获取列表最后一个元素
request.POSr.getlist() #直接将列表取出
request.GET #获取用户提交的get请求数据
request.GET.get() #只获取列表最后一个元素
request-GET.getlist() #直接将列表取出
get请求携带的数据是有大小限制的,大概好像只有4KB左右
而post请求则没有限制
def login(request):
#返回一个登陆界面
get请求和post请求应该有不同的处理机制
: param request:请求相关的数据对象,里面有很多简易的方法
:return:
if request.method == 'POST';
return HttpResponse("收到了"〕
return render(request, 'login.html')
三、django链接数据库(MySQL)
1.pycharm链接数据库(MySQL)
三个位置查找数据库相关
右侧上方database
左下方database
配置里面的plugins插件搜索安装
再没有卸载pycharm重新装
pycharm可以充当很多款数据库软件的客户端
2.django链接数据库(MySQL)
默认用的是sqkite3
DATABASES = {
'default': {
'ENGINE':'django.db.backends.sglite3' ,
'NAME':os.path.join(BASE_DIR,'db.sglite3'),
}
}
1.第一步配置文件中配置相关参数
DATABASES= {
'default":{
”ENGINE': "django.db.backends.mysgl”.
"NAME":'db01',
"USER”: 'root'.
”PASSORD": "123456',
”HOST":'127.0.0.1".
"PORT":3306,
"CHARSET': "utf8'
}
}
2.代码声明
django默认用的是mysqgldb模块链接MySQL
但是该模块的兼容性不好需要手动改为用pymysql链接
你需要告诉django不要用默认的mysqldb还是用pymysql
#在项目名下的init或者任意的应用名下的init文件中书写以下代码都可以
import pymysql
pymysql.install_as_MySQLdb()
四、Django ORM
orm对象关系映射:
类 表
对象 记录
对象属性 记录某个字段对应的值
1.先去models.py中书写一个类
class user(models.Model):
#id int primary_key auto_increment
id = models.AutoField(primary_key=True)
#username varchar(32)
username = models.CharField(max_length=32)
#password int
password = models.IntegerField()
2.数据库迁移(同步)命令
python3 manage.py makemigrations # 将操作记录
python3 manage.py migrate # 将改动真正的同步到数据库中
#只要你修改了models.py中跟数据库相关的代码就必须重新执行上述的两条命令
"""
上面两个命令必须是成对出现的
"""
class User(models.Model):
#id int primary_key auto_increment
id = models.AutoField(primary_key=True,verbose_name='主键')
#username varchar(32)
username = models.charField(max_length=32,verbose_name="用户名')
"""
CharField必须要指定max_length参数,不指定会直接报错
verbose_name该参致是所有字段都有的,就是用来对字段的解释
"""
#password int
password = models.IntegerField(verbose_name="密码")
class Author(models.Model):
#由于一张表中必须要有一个主键字段,并且一般情况下都叫id字段
#所以orm当你不定义主键字段的时候,orm会自动帮你创建一个名为id主键字段
#也就意味着,后续我们在创建模型表的时候如果主键字段名没有额外的叫法,那么主键字段可以省略不写
#username varchar(32)
username = models.CharField(max_length=32)
#password int
password = models.IntegerField( )
五、字段的增删改查
1.字段的增加
1.可以在终端内直接给出默认值
2.该字段可以为空
info = models.charField(max_length=32,verbose_name='个人简介',null=True)
3.直接给字段设置默认值
hobby = models.charField(max_length=32,verbose_name='兴趣爱好',default="study")
2.字段的修改
直接修改代码然后执行数据库迁移的两条命令即可!
3.字段的删
直接注释对应的字段然后执行数据库迁移的两条命令即可!
执行完毕之后字段对应的数据也都没有了
六、数据的增删改查
后面详细介绍
1.查
res = models.User.objects.filter(username username)
支持索引取值,切片操作,但是不支持负数索引
不推荐使用索引的方式取值
user_obj = models.User.objects.filter(username=username ).first()
filter括号内可以携带多个参数,参数与参数之间默认是and关系
可以把filter联想成where记忆
2.增
from appo1 import models
res = models.User.objects.create(username=username, password=password)
#返回值就是当前被创建的对象本身
#第二种增加
user_obj = models.User(username=username, password=password)
user_obj.save( ) #保存数据