django-diango基础配置
1、配置静态文件
1、静态文件
网站所使用到的提前写的文件,如图片\js\css\第三方前端模块bootstarp等等
创建文件夹static专门存放静态文件,可以再根据文件类型分文件夹存储,如css文件夹,js文件夹
2、配置
settings.py文件:
STATIC_URL = '/static/' # 这个是访问静态文件资源的接口前缀,通常情况下接口前缀的名字也叫static
# 手动添加静态文件夹路径
STATICFILE_DIRS = [
os.path.join(BASE_DIR,'static') # 可以有多个static文件夹,将static文件里面的所有资源都暴露给用户
]
3、动态绑定
settings.py文件中的网关接口,是所有的静态文件的访问url接口
有必要给它们实现动态绑定,当settings.py中的网关接口改变时,静态文件的访问接口要跟着变,才能保证无论我的网关接口是多少,静态文件的访问都能有效
<!--以login.html文件为例,引用本地bootstrap文件-->
{% load static %}
<script src="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"></script>
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
2、form表单提交数据
1、默认请求方式是GET,可以通过属性method改为POST
<form action="" method="post">
<p>username <input type="text" name="username" class="form-control"></p>
<p>password <input type="password" name="password" class="form-control"></p>
<input type="submit" value="登陆" class="btn btn-success pull-right">
</form>
'''
1 django后端的视图函数,默认处理的get请求
2 当改为POST请求后,需要在配置文件中修改代码,使得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',
]
2、GET请求提交数据可以携带参数
# 参数形式为:url?key=value&key=value
# 如登陆时提交用户名和密码:
http://127.0.0.1:8000/login/?username=jason&password=jason123
3、缺点
'''
1 携带的数据不安全
2 携带的数据大小有限制
3 通常只会携带不重要的数据
'''
4、action属性
'''
1 不写,默认朝当前地址提交
2 只写后缀,即只写ip:port之后的url
3 写全路径
'''
3、django后端处理请求
3.1 get与post
1、get请求与post请求
get # 浏览器向服务端请求数据,如请求登陆
post # 浏览器向服务端提交数据,后端处理数据,并根据需要返回响应结果
2、视图函数,默认处理get请求,需要修改配置后,才能处理post请求
3、不管是get或post请求,后端都会执行视图函数
3.2 request方法
1、获取请求方式
request.method() # 获取请求方式,结果为全部大写的字符串,如GET、POST等
2、获取用户请求数据
request.POST // 获取用户提交的post请求数据
request.GET // 获取用户提交的get请求数据
# 值为:类字典的一种数据格式,以登陆请求为例,携带数据username=AD&password=123
print(request.GET)
'''
<QueryDict: {'username': ['AD'], 'password': ['123']}>
'''
# 注意:value值是以列表存储,即相同的key的value的值都存放在这里
3、从用户请求数据中,获取用户提交的数据
# 以GET请求为例(登陆)
username = request.GET.get('username') # get()方法,获取对应的value列表中的最后一个
password = request.GET.get('password')
username_list = request.GET,getlist('username') # getlist()方法,获取对应的value列表
4、获取文件
获取form表单提交的文件
先要在form表单中添加属性 enctype="multipart/form-data"
,表示上传的是文件。所有数据将在FILES中得到
request.FILES.get('文件名')
4、django连接MySQL
4.1 配置文件
django默认的数据库为自带的sqlite3,需要改成自己的mysql
# 原配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# 改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
'CHARSET': 'utf8'
}
}
4.2 使用pymysql模块
由于django默认使用的mysqldb连接数据,因为版本问题,无法连接mysql数据库,所以要改成pymysql
在项目同名文件夹下或者应用文件夹下的__init__.py
中,导入模块
import pymysql
pymysql.install_as_MySQLdb()
4.3 orm
1、定义模型类
即数据表以及数据表字段的定义
在应用文件夹下的models.py文件中,书写模型类
真正的数据库中,表名是当前应用名_模型表类名
# models.py
# 以User表为例
class User(models.Model):
uid = models.AutoField(primary_key=True)
'''
1、这是定义自增主键的方法
2、如果不自定义主键,那么django会自动创建一个名为id的自增主键
3、innodb引擎规定,有且只有一个主键
'''
username = models.CharField(max_length=32)
'''
1、数据库中存储格式为varchar
2、参数max_length必须有值,否则会报错
'''
password = models.CharField(max_length=32,null=True)
# null=True允许字段为空
age = models.IntegerField()
# 整形可以不指定长度,mysql默认为11
# 还有BigIntegerField等方法也可以定义整形字段
2、数据库迁移同步
1、修改了数据库的时候,要将修改记录记录到应用文件夹的migrations文件夹内,每一个修改都自成一个py文件
2、将修改操作真正同步到数据库中
命令行操作:
python manage.py makemigrations # 记录到migrations
python manage.py migrate # 同步到数据库
注意点:
1、只要有修改数据库的操作,就要执行
2、必须按这个先后顺序执行命令
3、必须都执行
3、增删改
模型表
# 增、改
直接修改源代码,然后执行数据库迁移同步命令即可
# 删除
直接注释掉对应的代码,然后执行数据库迁移同步命令即可
需要注意的是:这样删除之后,数据表的数据无法恢复
模型表数据
# 查
user_obj = models.User.objects.filter(username=username)
'''
0、查所有的建议使用models.User.objects.all()
1、查询结果,类列表的一种数据格式存储:<QuerySet [<User: User object>]>
2、支持索引取值和切片操作,但是不支持负数索引,如可以通过索引取到真正的对象:user_obj = user_obj[0]
3、官方建议获取第一个对象:user_obj = user_obj.first()
'''
# 增加
user_obj = models.User.objects.create(username=username,password=password)
# 删除
models.User.objects.filter(id=delete_id).delete()
# 先查再删,将查出来的将查出来的列表中所有对象全部删除
# 改
models.User.objects.filter(id=edit_id).update(username=username,password=password)
# 先查再改,将查出来的列表中所有对象全部更新