一、初识Django
Django 是一个web框架 web框架的本质 - web框架的本质就是一个socket服务端 b/s架构:浏览器---服务器,本质也是c/s架构
二、HTTP协议
http请求协议: 请求首行: 请求的方法 空格 请求地址 空格 请求协议 GET /index HTTP/1.1\r\n 请求头: (key:value的形式展现) 'Connection: keep-alive\r\n Pragma: no-cache\r\n Cache-Control: no-cache\r\n Upgrade-Insecure-Requests: 1\r\n User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n Accept-Encoding: gzip, deflate, br\r\n Accept-Language: zh-CN,zh;q=0.9\r\n\r\n' 请求体: 可以携带data数据(向服务器发送的数据) 如:用户名/密码等信息
http响应协议: 响应首行: HTTP/1.1 200 OK \r\n 响应头: key:value \r\n xx:xx \r\n yy:yy \r\n 响应体: 响应数据...
三、Web框架简介
把一个请求拆分成几部分,每个部分干相同的事
Python中的web框架:
Django:大而全的框架
flask:轻量级 微框架
Tornado:高性能的框架
四、Django的安装和使用
- 安装Django的三种方式:
1 在cmd窗口下:pip3 install django == 1.11.9
2 在pycharm的Terminal窗口下: pip3 install django == 1.11.9
3 在pycharm - setting中安装,选择版本号: 1.11.9
- 卸载Django 1 pip3 unistall django 2 在pycharm-setting中进行卸载
- 安装完成后dgango后会在python36\Scripts,会多一个django-admin.exe
- 创建Django项目
命令行 django-admin startproject myfirstdjango(了解就行)
五、Django项目的目录结构
- manage.py 项目入口 运行项目需要用到 - templates文件夹:放模板文件,放html模板 - 项目名的文件夹(*****现阶段需要记住的) setting.py 项目配置文件(整个项目的配置信息) ***** urls.py 路由和函数的映射关系 ***** wsgi.py django框架帮咱写的socket - app名字的文件夹 migrations 数据库迁移相关的,记录变化的文件 admin.py 后台管理相关(知道就行) apps.py app的配置信息(app自己的配置信息) models.py 数据库相关,函数取数据用的 ***** tests.py 测试相关的 views.py 视图(业务逻辑) ***** - app的概念(每个django项目至少有一个app!!!) 大学 ---- django项目 xx学院 ---- 一个个的app 创建app的命令(新建app01) python3 manage.py startapp app01
六、运行Django项目
python3 manage.py runserver 重点***** 安装django 创建django项目 创建app 运行项目
- pycharm中创建项目 输入项目名称+自定义app名称+解释器选择
- pycharm中运行项目 绿色箭头运行
七、Django框架的简单使用
- django项目中重点需要关注的文件夹: - urls.py - views.py - models.py
1 在浏览器输入 http://127.0.0.1/index 并在页面显示hello django > 首先在views.py中键入新手三件套 from django.shortcuts import render from django.shortcuts import HttpResponse from django.shortcuts import redirect > 其次在views.py中输入index页面的函数 def index(request): return HttpResponse('hello django') #可以向浏览器返回字符串 > 接着在urls.py中新增路由和函数的映射关系 from app01 import views urlpatterns = [ url(r'^index/', views.index), ] > 接着点击绿色箭头运行该项目 > 最后打开浏览器输入 http://127.0.0.1/index查看页面显示内容
2 在浏览器输入 http://127.0.0.1/index 向浏览器返回一个页面 > 首先在views.py中键入新手三件套 from django.shortcuts import render from django.shortcuts import HttpResponse from django.shortcuts import redirect > 其次在views.py中输入index页面的函数 def index(request): #render是一个方法,第一个参数传request对象,第二个参数是模板文件的名字 return render(request,'index.html') > 接着在templates文件夹中新建html页面,命名问index.html,并在页面中随意写一些内容 <body> <h1>django的index页面</h1> <a href="https://baidu.com">点我看美女</a> </body> > 在浏览器输入 http://127.0.0.1/index 查看结果
3 在浏览器输入 http://127.0.0.1/index 重定向到www.baidu.com > 首先在views.py中键入新手三件套 from django.shortcuts import render from django.shortcuts import HttpResponse from django.shortcuts import redirect > 其次在views.py中输入index页面的函数 def index(request): # 返回重定向 # 1xx 接受的请求正在处理,信息性状态码 # 2xx 成功状态码 # 3xx 重定向状态码 # 4xx 客户端错误状态码 # 5xx 服务器错误状态码 return redirect('https://www.baidu.com') > 在浏览器输入 http://127.0.0.1/index 查看结果
八、Django框架层面分析
- 路由层: - 基本使用 # url是一个函数,函数参数,第一个参数是一个正则表达式 # 用户请求的路径只有匹配成功,才去执行后面的函数 url(r'^index$,views.index)
- 无名分组 url(r'^index/(\d+)/(\d+)', views.index) 括号内的内容会被分组区分开,当作一个个参数,传入到都好后面的views.index视图函数中 视图函数会接受这些参数
- 有名分组 url(r'^index/(?P<cc>\d+)/(?P<ee>\d+)', views.index) 括号内的内容会被分组分出来,当作参数,以key:value的形式传入后面的视图函数 视图函数会接受这些参数
- 反向解析 1 补充重定向 2 反向解析,通过名字,反解出名字对应的url地址 例1:应用在视图函数中 urls.py url(r'^test222/$', views.test,name='ttt') views.py from django.shortcuts import reverse def index(request): url = reverse('ttt') return redirect(url) 例2:应用在模板中 <a href="{% url 'ttt' %}">点我看新美女</a>
- 路由分发 例如: 使用命令创建app02 python3 manage.py startapp app02 ### 注意,新建app一定要在setting.py中进行注册 ### 注册app,两种方式都可以,官方推荐使用下面的第一种 找到INSTALLED_APPS = [],并在其中添加以下命令, 1 'app02.apps.App01Config', 2 'app02', 使用方式: 1 在项目文件夹的urls.py中,控制不同app的urls.py urlpatterns = [ url(r'app01/',include('app01.urls')), #正则部分不能加结束符$ url(r'app02/',include('app02.urls')), #正则部分不能加结束符$ ] 2 在app01文件夹中的urls.py中,控制本app的路由 urlpatterns = [ url(r'^app01test/', views.test), ] 3 在app02文件夹中的urls.py中,控制本app的路由 urlpatterns = [ url(r'^app02test/', views.test), #给该条路由重命名为ttt ] 4 在不同app的文件夹中的views.py文件中输入定义test函数 5 在web页面中输入测试:http://127.0.0.1:8000/app01/app01test/ http://127.0.0.1:8000/app02/app02test/
- django2.0版本的path - django2.x的re_path就是1.x的url - django2.x的path是新增的功能 path('准确路径',view.test,name='ttt')