静态文件配置,pycharm链接数据库,django链接数据库 ORM
目录
静态文件配置
不经常变化的软件,主要针对html文件所使用到的各种资源 eg: css文件、js文件、img文件、第三方框架文件。
django 针对静态文件资源需要创建一个目录统一存放
static目录
该目录下可以存放多种类型目录,还可以新建目录
# 常用目录
css目录
js目录
img目录
utlis目录/plugins目录/libs目录/others目录/
或者不创建
资源访问问题
我们在地址栏中靠路由获取到相应的资源是因为程序员提前开设了资源的接口。(路由与功能关系)
静态文件资源访问
默认情况下无法访问,因为我们没有提前开设静态文件的资源访问接口
配置静态文件接口
想要使用static中的静态资源必须在settings里配置文件
# 方法
在settings 最下面一行添加
STATIC_URL = '/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static') # 存储静态文件资源的目录名称
# 在html文件内导入静态资源
<link rel="stylesheet" href="{%static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %} ">
<script src = "{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
<script src = "{% static 'bootstrap-3.4.1-dist/js/jqery.js' %}"></script>
后续如果需要更改路由只需要修改settings里最下面的路由
STATIC_URL = '/static/' # 修改这里
注意事项
如果有多个static目录的话
"""
os.path.join(BASE_DIR, 'static')是存储静态文件资源的目录名称。接口前缀正确之后,会拿着后面的路径依次去列表中自上而下的查找,找到即停止。
"""
"""
当我们在访问一个网页时如果之前访问过,那么网页可能会混存下来访问过的内容,当我们再次访问时会访问到之前的网页,当我们进行如下设置,网页每一次都是真正地向后端发送请求而不是使用缓存的网页(中文:停用缓存,英文:disable cache)。
"""
form表单
action 控制数据提交的地址
1.action="" 数据默认提交给当前页面所在的地址
2.action="https://www.baidu.com/" 完整地址
3.action="/index/" 朝当前服务端的index地址
127.0.0.1:8000/index/ # 本地地址不需要填写自动补全
method 控制数据提交的方法
1.get 默认
2.post 可以改post method="post"
form表单默认get请求
"获取post请求input标签一定要含有name属性。"
请求方法补充
1.get请求 :朝服务端索要数据,也可以携带一些额外的要求。
携带额外数据方式:URL?xxx=yyy&uuu=zzz,但是问号后面携带的数据大小是有限制的(2kb),并且不能携带敏感数据(密码)
2.post请求: 朝服务端提交数据
携带额外数据的方式:请求体,请求体携带数据安全性较高并且没有大小的限制。
前期发送post请求需要注释掉配置文件中的某一行
# settings里
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对象
如果是get请求就返回一个html页面
如果时post请求就获取发送过来的数据
获取当前请求方法
request.method # 结果是纯大写的字符串
可以根据 结果进行判断 返回不同数据
if request.method == 'GET':
return render(request, 'input.html')
elif request.method == 'POST':
return HttpResponse('我是赛利亚')
request.POST # 获取post请求请求体里面携带的数据
"是一个字典 键对着值 相同的键如果有多个值那么就是键:值列表"
request.post.get() # 获取值列表里最后一个数据值
request.POST.getlist() # 获取整个键对应的值列表
request.GET # 获取网址问号后面携带的数据
"结果也是一个字典"
request.post.get() # 获取值列表里最后一个数据值
request.POST.getlist() # 获取整个键对应的值列表
优化代码
在试图函数中针对不同请求编写技巧
if request.method = 'POST':
return HttpResponse()
return # 不需要在进行判断GET
pycharm连接数据库
pycharm初次连接数据库 点开界面右侧 database进入选择数据库后进入界面 输入数据库用户名与密码--点击弹出界面下方三角警示标下载驱动文件---appy后 ok
驱动问题解决方法
django连接数据库
djiango 运行后 自动产生了一个sqlite3是一个小型的数据库 主要用于本地测试
我们需要使用django 来连接MySql 需要修改settings配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
修改配置文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day51',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123',
'CHARSET': 'utf8'
}
}
改完配置后可能会遇到启动报错问题
did you install mysqlclient?
django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
import pymysql
pymysql.install_as_MySQLdb()
django2.X及以上都可以直接通过下载mysqlclient模块解决
pip3.8 install mysqlclient
ps:该模块windows下载问题不大 主要是mac电脑可能有问题
mac电脑报错
去settings里修改配置文件
ORM
ORM:对象关系映射
优点:它能够让不会SQL语句的python程序员,使用python面向对象的语法来操作数据库。
缺点:封装程度太高,有时候sql语句的效率偏低,需要自己写SQL语句。
类 表
对象 一条条数据
对象点名字 数据获取字段对应的值
ORM基本操作
在models.py 模型层编写模型类
class userinfo1(models.Model): # 类名等于表名
id = models.AutoField(primary_key=True) # 字段名= 字段类型+约束条件、
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
age = models.IntegerField() # int
编写好了还不行。需要进行数据库迁移操作
执行数据库迁移相关命令
python38 manage.py makemigrations # 将操作记录
"在migrations init 文件里"
python38 manage.py migrate # 同步到数据库
'''注意每次在models.py修改了与数据库相关的代码 都需要再次执行上述命令'''
ORM基本语句
from app01 import models
1.创建数据
models.类名.objects.create()
models.userinfo1.objects.create(name=name,pwd=pwd,age=age)
2.查询数据
models.类名.objects.filter()
res = models.userinfo1.object.filter(name=name) # 结果是个对象
res[0].字段名 可以拿到该字段的数据
"改,删都需先查询到该数据才能操作"
3.修改数据
models.类名.objects.update()
models.userinfo1.objects.filter(name=name).update(name='lxj') # 多条数据通过id筛选
4.删除数据
models.类名.objects.delete()
models.userinfo1.objects.filter(id=2).delete()