django框架极速入门指南-02
内容概要
- 静态文件配置
- request对象方法
- pycharm连接MySql
- django连接MySql
- django模型层初识
- 基本ORM操作
静态文件配置
- 1.静态文件
指的是不怎么经常变化的文件,主要针对HTML文件所使用到的各种资源
如:css文件、JS文件、img文件、第三方框架文件(bootstrap文件)
在django中针对我们的静态文件资源需要单独创建一个目录统一存放!
'static目录'
该目录下的各种类型文件都比较多的话,还可以继续创建目录
css目录
js目录
img目录
utils目录(plugins目录/libs目录/others目录/不创建)
- 2.资源访问
我们之所以能在地址栏中通过路由获取到相应资源是因为程序员提前开设了该资源的接口
就是在views以及urls文件中我们编写的代码
- 3.静态文件资源访问(类似static目录下的文件)
默认情况下无法访问,因为我们没有提前开设静态文件资源的访问接口!
静态文件必要配置!!
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), ]
'''
接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下查找 一旦找到就返回
'''
只有在settings文件中配置了上述代码,templates里面中的文件才可以访问到!
1.接口前缀
STATIC_URL = '/xxx/' # 访问静态文件资源的接口前缀(通行证)
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 存储静态文件资源的目录名称
os.path.join(BASE_DIR, 'static1'), # 存储静态文件资源的目录名称
os.path.join(BASE_DIR, 'static2'), # 存储静态文件资源的目录名称
]
```python
接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下查找 一旦找到就返回
2.接口前缀动态匹配
{% load static %}
<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>
form表单
action 控制数据提交的地址
1.action="" 数据默认提交给当前页面所在的地址
2.action="/xxx/" 提交给当前服务端的/index/地址
method 方法 控制数据提交的方法
默认为get
可以修改为 post
get请求与post请求的区别
method="get"
朝服务端索要数据 也可以携带一些额外的要求
携带额外数据的方式: URL?xxx=yyy&uuu=zzz
问号后面携带数据的大小是有限制(2KB)的并且不能携带敏感数据
method="post"
朝服务端提交数据
携带额外数据的方式: 请求体
请求体携带数据安全性较高并且没有大小限制
# django框架,在接收页面提交post请求时,默认会报403错误
'解决办法:配置文件中注释一行代码即可'
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 # request.method 获取请求方式 结果是纯大写的字符串数据
GET\POST
request.POST # 获取post请求请求体里面携带的数据
request.POST.get() # 获取列表最后一个数据值
request.POST.getlist() # 获取整个列表数据
request.GET # 获取网址问号后面携带的数据
request.GET.get() # 获取列表最后一个数据值
request.GET.getlist() # 获取整个列表数据
'''在视图函数中针对不同的请求代码编写套路'''
if request.method=='POST'
return HttpResponse()
return HttpResponse()
pycharm连接数据库
"""其实pycharm也可以充当很多数据库软件的客户端"""
1.pycharm右上方侧边 >>> database
2.pycharm左下方边角 >>> database
3.上述两个地方都没有,需要下载插件,或者直接重装一个正常的pycharm
在Pycharm 中的 settings >>>>> plugins
搜索database下载即可
连接操作
1.选择数据库
2.首次链接需要下载驱动
download driver...
3.测试链接如果不通过 则需要换驱动重新下载使用
Driver:MySQL MySQL for 5.1
我们需要在我们项目同名文件中的sttings文件中找到 DEFAULT设置,将默认的配置 注释掉
换成图下配置即可,(账号密码不一样,其他都一样!)
1.默认配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
2.修改配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'jp_05',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'suifeng123',
}
}
3.指定模块
django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
在项目同名的文件夹内的__init__.py
或者应用名的文件夹内的__init__.py
添加一行固定的代码
import pymysql
pymysql.install_as_MySQLdb()
django2.X及以上都可以直接通过下载mysqlclient模块解决
pip3.8 install mysqlclient
# 该模块windows下载问题不大 主要是mac电脑可能有问题
ORM简介
ORM:对象关系映射(Object Relational Mapping)
# 特点
能够让不会写SQL的python程序员使用python面向对象的语法就可以直接操作MySQL;
好处:提升了开发效率...
坏处:封装了SQL语句,有时候可能效率不高,还需要人为编写SQL调优;
# 概念
表 类
一行行数据 类产生的一个个对象
数据字段 对象的一个个属性
ORM基本操作
1.先在models.py中编写模型类
class BoyInfo(models.Modle):
# 字段名 = 字段类型 + 约束条件
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
age = models.IntegerField()
2.执行数据库迁移相关命令!(必须!)
python manage.py makemigrations 将操作记录到小本本上(migrations)
python mange.py migrate 将操作同步到数据库上
'''
首次执行迁移命令,django还会自动创建一些默认需要使用到的表
注意每次在models.py修改了与数据库相关的代码 都需要再次执行上述命令
'''
ORM基本语句
from APP名字 import models
# 增models.类名.objects.create()
# 删models.类名.objects.delete()
# 改models.类名.objects.update()
# 查models.类名.objects.filter()
# 1.增
user_obj = models.Users.objects.create(name='jack', pwd='333')
print(user_obj)
print(user_obj.uid)
print(user_obj.name)
print(user_obj.pwd)
# 2.查
res = models.Users.objects.filter(name='xiaoming')
print(res) # <QuerySet [<Users: Users object>]>
print(res[0]) # Users object
print(res[0].uid) # 1
print(res[0].name) # jason
print(res[0].pwd) # 123
# 3.改
models.Users.objects.filter(uid=1).update(name='xiaoming')
# 4.删
models.Users.objects.filter(uid=3).delete()