昨日惠顾
2.借助于第三方模块帮你撸
wsgiref模块 web服务网关接口
帮你封装了socket
帮你处理了HTTP数据 直接封账成一个大字典
也是flask的启动源码
django字典的模板 本身能够承受的并发量很低 大概1000左右
3.基于上面的代码按照功能的不同拆封成不同的文件夹
urls.py 路由与视图函数对应关系(视图函数可以使函数也可以是类)
views.py 一推处理业务逻辑的视图函数
templates 放html文件
如果想要增加一个功能,只要在两个文件中做改动即可。首先在urls.py中新增一组对应关系
4.动静态网页
html页面上的数据是否是写死的还是后端动态获取的
5.后端获取时间展示到HTML页面 直接利用字符串的替换完成
6.基于jinja2模板语法,实现后端给HTML页面传值
模板语法是在后端生效的,浏览器是无法识别模板语法,所有的数据渲染全部都是在后端事先生成好的 ,晚会将完整的HTML页面
变量相关 {{}}
逻辑相关 {%%}
7.利用jinja2实现前端 后端 数据库三者结合
8.简易版本的web框架请求流程图
python三大主流框架
django:大而全
flask:小而精
tornado:异步非阻塞
django简介:
注意事项:
1.计算机的名称不能有中文
2.以后索引项目名称也不要有中文
3.python解释器不要使用python3.7 建议使用3.4-3.6
4.一个python窗口只能跑一个项目
版本问题:
1.X 2.X 版本之间有一定的区别
统一使用1.11.11版本,暂时不要使用虚拟环境
pip3 install django==1.11.11
django-admin
创建项目:django-admin startproject mysite
mysite的文件夹,里面有一个文件夹(跟项目名同名)加一个manage.py
启动项目:首先需要切换到项目目录 cd /masite
python3 manage.py runserver #默认是本机的8000端口
python3 manage.py runserver 127.0.0.1:8888
创建app:
app就是类似于具体功能的划分
python3 manage.py startapp day01#APP的名字也应该做到见名知意
命令行创建django项目,默认不会主动创建templates文件夹,并且settings配置文件中也没有该文件夹的路径配置。
需要手动配置:DIR:[os.]
创建app需要注意的事项
小白必会三板斧
HTTPresponse 返回字符串
render 返回HTML文件并且支持传值
redirect 重定向 可以写本网站的路径后缀 还可以写其他网站的全路径
以登录功能为例
静态文件配置
1.默认情况下所有的HTML文件都是放在templates文件夹里
2.什么是静态文件:
网站所使用到的提前写好的css js 第三方的前端模块 图片 都叫静态资源
3.默认情况下网站所用到的静态文件资源都会放在static文件夹下
通常情况下,在static文件夹内还会创建其他文件夹
css 文件夹
js 文件夹
font 文件夹
img 文件夹
bootstrap 文件夹
fontawesome 文件夹
为了更加方便的管理文件
django中需要自己手动创建静态文件存放的文件夹
STATIC_URL = '/static/' #访问静态文件资源接口前缀 通常情况下接口的前缀名也叫static 如果后缀是static 就拿路径到下面的文件夹下找
#手动开设静态文件访问资源
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')# 将static文件里面所有的资源暴露给用户 可以有多个,自上往下查找
]
4.静态文件动态绑定
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-distcssootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7-distjsootstrap.min.js' %}"></script>
form表单默认是get请求,并且get请求也是能够携带参数的
http://127.0.0.1:8000/login/?username=jason&password=jason123
#特点:url?xxx=xxx&yyy=yyy
1.携带的数据不安全
2.携带的数据大小有限制,4KB左右
3.通常只会携带一些不是很重要的数据
form表单里的action参数
1.不写,默认朝当前地址提交
2.只写后缀,/index
3.写全路径
前期在朝后盾提交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',
]
视图函数必须有返回值并且返回值都是HTTPresponse对象(render,HttpResponse,redircet都是HTTPresponse对象)
django后端的视图函数,默认处理的是get请求。但无论是发get还是post请求,都会执行视图函数。
get请求指向拿到login页面,post请求想提交数据,然后后端做校验
如何判断当前请求方式
request.method 拿到的是字符串大写的请求方式 GET POST
if request.method == "POST":
return HttpResponse('收到了')
return render(request,'login.html')
request方法初始
request.method 获取请求方式,并且是纯大写的字符串
如何获取用户提交的post请求数据:
request.POST
request.POST.get() #默认只会获取列表最后一个元素,里面要写属性名
request.POST.getlist() #获取列表,里面要写属性名
如何获取用户提交的get请求数据:
request.GET
request.GET.get() #默认只会获取列表最后一个元素,里面要写属性名
request.GET.getlist() #获取列表,里面要写属性名
pycharm连接数据库
django连接mysql
有两部操作:
1.配置文件配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',#指定数据库类型
'NAME': 'day50',#指定库的名字
'USER':'root',#注意 所有的键都是全大写
'PASSWORD':'',
'HOST':'127.0.0.1',
'PORT':3306,
'CHARSET':'utf8'
}
}
2.主动告诉django,不要用默认的MySQLdb连接,而是用pymysql
可以在项目名下的__init__.py
中书写,也可以在应用名下的__init__.py
中书写
import pymysql
pymysql.install_as_MySQLdb()
django orm简介
为什么要使用数据库:
能够让不会数据库操作的人也能简单方便去操作数据库
orm的缺点:
封装程度高,有时会出现查询效率偏低的问题。
所以工作中:简单的用orm 复杂的追求速度 需要手动书写SQL语句
django中如何操作orm
书写模型类,去应用下的models.py中书写模型类(就是类)
注意:
之后在写django项目的时候,一个django就对应一个数据库,不要出现多个项目使用同一个数据库的情况
数据库迁移(同步)命令:
1. python3 manage.py makemigrations #将数据库的修改记录到小本本上(migrations文件内)
2. python3 manage.py migrate #将修改操作正在同步在数据库中
注意:
上面两条命令必须是成双成对出现的,只要修改了models里面跟数据库相关的代码,就必须重新执行上面的两条命令
模型表字段的增删改查
class User(models.Model):
id=models.AutoField(primary_key=True)#django当你不指定主键的时候,会自动帮你创建一个id字段,并且作为主键,如果自己创建了,django就不会帮你创建
username=models.CharField(max_length=255)#charField必须要指定max_length参数,CharField就是mysql的varchar
password=models.CharField(max_length=32)
#设置默认值
#方式一:
email=models.EmailField(default='123@qq.com')
#方式二:
phone=models.BigIntegerField(null=True)
#还可以直接在提示中给默认值,
字段的修改:
直接修改代码,然后执行数据库的迁移命令(两条一条不能少)
字段的增加:
方式一:设置默认值 default=‘嘻嘻嘻’
方式二:允许字段为空 null=True
字段的删除:
直接注释掉对应的字段,然后再执行数据库的迁移命令
模型表数据的增删改查
数据的查
data=models.User.objects.filter(username=username,password=password)## <QuerySet [<User: User object>]>
user_list = models.User.objects.all()# 等价models.User.objects.filter() 所有数据都查出来 里面是一个个的数据对象
user_obj=data[0]
user_obj.username
fileter返回的结果是一个“列表”,里面才是数据对象,filter括号内可以放多个关键字参数,这多个关键参数在查询的时候是and关系
数据的增
models.User.objects.create(username=username,password=password)# create方法 会有返回值 返回值就是当前被创建的数据对象本身
数据的改
models.User.objects.filter(id=edit_id).update(username=username,password=password)
#批量操作,会将filter查询出来的列表中所有的对象都更新
数据的删
models.User.objects.filter(id=delete_id).delete()
#批量操作,会将filter查询出来的列表中所有的对象都删除