2.借助于第三方模块帮你撸css
wsgiref模块 web服务网关接口html
帮你封装了socket前端
帮你处理了HTTP数据 直接封帐成一个大字典python
也是flask的启动源码mysql
django字典的模板 自己可以承受的并发量很低 大概1000左右web
3.基于上面的代码按照功能的不一样拆封成不一样的文件夹sql
urls.py 路由与视图函数对应关系(视图函数可使函数也能够是类)数据库
views.py 一推处理业务逻辑的视图函数django
templates 放html文件flask
若是想要增长一个功能,只要在两个文件中作改动便可。首先在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
启动项目:首先须要切换到项目目录 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-dist\css\bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist\js\bootstrap.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.method 获取请求方式,而且是纯大写的字符串 如何获取用户提交的post请求数据: request.POST request.POST.get() #默认只会获取列表最后一个元素,里面要写属性名 request.POST.getlist() #获取列表,里面要写属性名 如何获取用户提交的get请求数据: request.GET request.GET.get() #默认只会获取列表最后一个元素,里面要写属性名 request.GET.getlist() #获取列表,里面要写属性名
有两部操做:
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()
为何要使用数据库:
可以让不会数据库操做的人也能简单方便去操做数据库
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查询出来的列表中全部的对象都删除