**
http
**
Http协议是超文本传输语言
请求方式
get 获取服务端数据
post 向服务端提交数据
put 向服务端上传数据
delete 删除服务端的资源
状态码
状态码 状态码英文标示 意义
200 OK 请求成功 查询成功
201 修改和添加 成功
204 删除成功
301 Moved Permanently 客户端请求的资源已被永久移动到新的URL 重并项
302 Found 客户端的资源被临时移动用于三方登陆之后的跳转
304 Not Modified 请求的资源未被修改,可以继续访问原URL常用于使用缓存的情况下
400 Bad Request 客户端语法错误
401 Unauthorized 请求需要经过身份验证
402 Payment Required 保留状态码,为以后使用做准备
403 Not Found 客户端直接拒绝客户端的请求
404 Method Not Allowed 客户端请求的资源找不到
500 Internal Server Error 服务端内部错误
502 Bad Geteway 服务端内部错误,服务端错误的网关
503 Serbice Unavailable 服务端无法响应客户端的请求
django框架
Django主要采用MVT模式
MVT
M-model:模型,操作数据库功能部分
V-view:视图,处理业务逻辑
T-Template:模版,操作页面
MVC
M-model:模型,和MVT中的M是一样的
V-view:视图,和MVT的T是一样的
C-Controller:控制器,用来进行数据的逻辑操作
Django框架安装:pip install django==2.2.2
Django项目创建:django-admin startproject 项目名
启动项目:python manage.py runserver
Django 介绍
Django是一个开放源代码的Web应用框架,由纯Python写成
Django的特点
Django适合与内容有关的项目,常见的就是后台管理
子应用创建
python manage.py startapp 应用名
注意:文件夹名最好用字母或数字不能有特殊字符
模版配置
把html页面存到哪里就需要打开settings.py文件进行模版配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
创建模版
有了这个文件夹的配置之后,接下来在项目根目录下创建与配置同名的文件夹templates/
并在其中书写一个简单的html*,并命名为index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>这是我的第一个模版页面</h3>
</body>
</html>
视图渲染
在views.py中引入一个新的方法render这个方法专门用来返回一个html页面
from django.shortcuts import render
#函数视图
def MyView(request): # 1.request 接收到的请求
# 2.处理业务逻辑
# 3.返回响应
#返回模版页面 参数1:请求 参数2:模版页面 #参数3:传递给页面的数据(字典)
return render(request,'index.html')
模版变量渲染
模版变量类似:{{ var }}
修改一下刚才的index.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>这是我的第一个模版页面</h3>
</body>
</html>
在页面中模版变量叫:weather,在视图函数代码中,就需要有一个映射格式数据他的key值对应html页面中的模版变量,value是这个模版变量渲染的结果
from django.shortcuts import render
from django.http import HttpResponse
#函数视图
def MyView(request): # 1.request 接收到的请求
# 2.处理业务逻辑
# 3.返回响应
# return HttpResponse("这是我的第一个视图") #返回简单响应
#返回模版页面 参数1:请求 参数2:模版页面 #参数3:传递给页面的数据(字典)
context = {
'weather':'大晴天',
}
return render(request,'index.html',context)
总结render
render可以用来返回一个模版页面并将一个字典组合成的模版变量传递到模版页面上,完成页面的渲染
render(request, template_name, context=None)
‘’’
request: 固定接收 request 请求,与视图 han s 第一个参数相同
template_name: 为一个可以找到的模板页面,填写配置 template 的相对路径即可
context: 模板页面所需模板变量,是一个字典格式,key 为模版变量,value 为渲染的值
‘’’
模版语句循环、分支
for标签
固定格式:{% for 变量 in 循环对象 %}
{{变量}}
{% endfor %}
{% for score in scores %}
{{ score }}
{% endfor %}
注意:模版语言中,不会出现索引超出范围的IndexError或者Key值不存在的KeyError,取不出任何东西则只是一个空
if标签
{% if %}用来判断
{% if test_list %}
列表不为空
{% elif test_dict %}
列表为空,字典不为空
{% else %}
列表字典均为空
{% endif %}
{% if money < 100 %}
<p>你太穷了</p>
{% elif money < 500 %}
<p>你可以买点好吃的</p>
{% else %}
<p>挺有钱</p>
{% endif %}
静态资源
静态资源概念
静态资源可以引入css、img、js等,来装饰我们的页面
静态资源路径配置
在settings中配置静态文件目录路径
STATICFILES_DIRS = (
os.path.join(BASE_DIR, ‘static’),
)
STATICFILES_DIRS 该配置项用来告诉 django 在查找静态资源时,应该访问哪个目录
在和settings的文件夹同级下创建static文件夹并保存到里面一张图片
静态资源模版使用
有了图片就可以直接引入并使用
{% load staticfiles %}
<img src="{% static '1.jfif' %}">
{% tag %}这个叫模版标签*,模版标签不同于模板变量,模版标签经常用来加载数据,或这是一些处理逻辑,使用模版标签可以方便我们在模板页面上实现某些只有在后台代码中才可以实现的逻辑功能
在页面中要引入静态资源,css、img、js文件在引入时都需要通过***{% static “path” %}***来进行引入
注意:需要使用静态标签***{% static %}前使用{% load staticfiles %}***标签进行静态资源路径的加载
ORM映射
ORM映射概念
ORM映射关系是django与数据库之间的一个桥梁,可以使开发者不再关注如何去编写SQL语句直接一套ORM所提供的API借口即可方便对各种怪数据库进行交互
模型类编写
通过ORM映射在字应用下models.py文件中创建模型类
from django.db import models
# Create your models here.
#编写模型类 模型类用于生成数据库中的表
class Games(models.Model):
# game_name字段 CharField字符串类型 max_length最大长度 verbose_name后台管理的列名
game_name = models.CharField(max_length=20,verbose_name='游戏名')
# price字段 IntegerField整形
price = models.IntegerField(verbose_name='价格')
# Meta元类,存放一些配置信息
class Meta:
verbose_name = '游戏表' # verbose_name后台管理的表名
verbose_name_plural=verbose_name # verbose_name_plural后台管理的表名 的 复数
db_table='games' # 数据库中生成的表名
# 魔法方法 ,直接输出对象时,输出的是游戏名
def __str__(self):
return self.game_name
CharField为字符串 max_length 最大长度 verbose_name 后台管理的字段名
IntegeField 整型
要记得在settings文件中进行配置
#myproject/settings.py
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘myapp’,
]
生成迁移文件
python manage.py makemigrations 创建数据库迁移文件
执行迁移
python manage.py migrate 根据数据库迁移文件生成对应SQL语句并执行
创建超级用户
python manage.py createsuperuser
报错
packages\django\db\backends\mysql\operations.p
y”, line 146, in last_executed_query
query = query.decode(errors=‘replace’)
AttributeError: ‘str’ object has no attribute ‘decode’
解决方案:这个是因为operatins.py文件中的decode不对打开那个文件改成encode就ok了