静态文件相关配置
每次在Django项目下新建的应用,都需要去配置文件settings中进行注册,才能生效。例如新建了一个app01应用。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 'app01' # 简写 'app01.apps.App01Config' # 全称 ]
HTML文件默认全部放在templates文件夹中。对于前端已经写好了的文件,我们只是拿过来使用,那么这些文件就可以称为静态文件。静态文件可以是bootstrap一类的前端框架,也可以是css,js,图片。全部存放在全部存放在static文件夹下。
注意:启动Django项目时,一定要确保一个端口号只有一个Django项目在占用,不然的话,会容易造成bug。
用户可以访问的资源都在url中,只有URL中开设了相关的资源才能访问到 ,如果访问未开设的就会报错。后端的资源一般都需要手动指定是否暴露给用户。
静态文件配置
静态文件接口前缀的动态解析
Django重启机制
Django是支持自动重启代码的,只需多刷新几次页面,但是有时候重启机制比较慢。
机制:实时监测文件代码完成,只要有变化,就会自动重启。
缺点:自动重启的时间具有不确定性。比如说你的代码还没有写完,这时候自动重启代码,然后就会发生报错。
form表单
form表单默认的是get请求,我们可以通过method改为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', ]
form表单提交数据目的地由action
1.不写的情况下 默认往当前地址提交
2.还可以写后缀/index/(将项目常用这种)
3.还可以写全路径
获取前端数据
对数据的处理,不单单只有wsgiref模块,django后端也进行了大量的数据处理。
# request.method获取请求方法: GET方式: request.GET获取前端get提交的数据(就类似于是一个大字典) 取值 request.GET.get('username') # 虽然value是一个列表,但是默认只取列表最后一个元素。不建议使用中括号的形式取值。 request.GET.getlist('hobby') # 如果想直接把列表全部取出
POST方式: request.POST获取前端post提交的数据(就类似于是一个大字典) 取值 request.POST.get('username') # 虽然value是一个列表,但是默认只取列表最后一个元素。不建议使用中括号的形式取值 request.POST.getlist('hobby') # 如果想直接把列表全部取出
Django链接数据库
Django一般默认使用的是自带的sqlite数据库。如果你想要让它使用其他的数据库,需要在settings配置文件中配置。
在项目名下的init文件或者是应用名下的init文件中,告诉django不要使用默认的mysqldb连接mysql,而是使用pymysql。
Django中的orm
ORM对象关系映射
表 -----> 类
一条条记录 -----> 对象
字段对应的值 -----> 对象的属性
首先需要在应用下的models.py中书写模型类
class User(models.Model): # 将id字段设置为User表主键字段 在django orm中 你可以不写主键字典 django会默认给你的表创建一个名为id的主键字段 # id = models.AutoField(primary_key=True) # 一旦你自己指定了主键字段 那么django就不会自动再帮你创建了 username = models.CharField(max_length=32) # username varchar(32) CharField必须要指定max_length参数 password = models.IntegerField() # password int #需要执行数据库迁移(同步)命令 python3 manage.py makemigrations # 仅仅是在小本本上(migrations文件夹)记录数据库的修改 并不会直接操作数据 python3 manage.py migrate # 将数据库修改记录 真正同步到数据库 注意:只要动了models中跟数据库相关的代码,就必须重新执行上面的两条命令 缺一不可
增删改查
1.先连接数据库展示所有用户信息 1.获取模型表中所有的数据 models.User.objects.all() # 结果也是querySet对象 只要是queryset对象 就可以点query查看内部sql语句 2.筛选相应的数据 1.直接获取对象的 models.User.objects.get(**kwargs) # 条件不存在 立刻报错 不推荐使用 2.获取querySet对象的( 1.querySet对象你可以把它看成是一个列表 里面放的是一个个的数据对象 2.querySet对象支持索引取值和切片操作 但是不支持负数 也不推荐你使用 建议你使用封装好的方法 ) queryset = models.User.objects.filter(**kwargs) # 括号内多个参数是and的关系 user_obj = querySet.first() # 没有也不会报错 直接返回None 2.新增用户 1.利用create()方法 该方法会将当前创建的数据对象返回出来 current_user_obj = models.User.objects.create(**{...}) 2.利用对象的绑定方法 user_obj = models.User(**kwargs) user_obj.save() 3.修改用户 1.利用queryset对象的update批量修改的方法 models.User.objects.filter(age = 18).update(**kwargs) # 会将queryset中所有的数据全部修改 2.利用对象修改属性的方法 user_obj = models.User.objects.filter(**kwargs).first() user_obj.username = 'jason' user_obj.save() # 该方法 会将数据库中所有的字段全部重写修改一遍 效率极低 不推荐使用 4.删除用户(不会真正删除数据 通常都是给数据加一个表示是否删除的字段) 1.利用queryset对象delete批量删除 models.User.objects.filter(age = 18).delete() # 会将queryset中所有的数据全部删除