一、手撸简易web框架

  • 通过统一思想,对各个功能或者接口进行统一,越来越像是Django框架的流程,实现了低配版的Django。下面是具体的流程图

  • 具体步骤为:wsgiref库拿到用户的请求内容,我们判断用户请求的链接地址内容,匹配到对应的后端函数,后端函数内部调用数据库得到需要的数据,再拿到html文件进行读取后,之后再把数据通过jinja2模块语法插入html文件中,最后再把修改过后的html文件return出去。wsgiref库把该html文件内容发送回浏览器,浏览器拿到内容后展示在页面上。结束。
  • 基于第三方模块帮你撸
  • 使用了wsgiref库和jinja2库
  • wsgiref库帮我们封装了http协议,并将http的请求头和请求首行变成字典。即将请求内容解包,响应的内容压包。
  • jinja2库专门用来处理后端数据与html页面的交互
  • views.py 里面的放的是函数 我们管这些函数叫视图函数 视图层

    urls.py 里面放的是 路由(后缀)与视图函数的对应关系 路由层

    templates文件夹 里面放的全是html文件 模板层

二、动静态网页

1. 静态网页

  • 数据是写死的 万年不变(哪怕改变了 也是人为直接修改)

2. 动态网页

  • 数据是实时获取的

    eg:

    1 后端代码动态获取 当前时间

    2 数据是从数据库查询出来的

三、jinja2模板语法

1. jinja2的作用

  • 专门用来处理后端数据与html页面的交互

  • 模板语法(极其贴近python后端语法)

  • 让你能够在html页面上 也能够用后端python语法来操作后端传递过来的数据

  • 语法实例:

    		<p>{{ userDic }}</p>
    <p>{{ userDic.username }}</p>
    <p>{{ userDic['age'] }}</p>
    <p>{{ userDic.get('hobby') }}</p>
    <p>{{ userDic.get('hobby').0 }}</p>
    <p>{{ userDic.get('hobby').1 }}</p>
    <p>{{ userDic.get('hobby').2 }}</p> {% for user_dic in user_list %}
    <tr>
    <td>{{ user_dic.id }}</td>
    <td>{{ user_dic.username }}</td>
    <td>{{ user_dic.password }}</td>
    </tr>
    {% endfor %}
    • 模板的渲染 将后端传递给html文件的数据 在后端处理好 生成一个完整的html文件的过程
    • 注意 模板的渲染是在后端完成的 跟前端没有关系

四、python主流web框架

1. django

  • 大而全 自带的组件和功能非常非常多 ,类似于航空母舰
  • 不足之处:写小项目的时候 可能会比较笨重(大材小用)

2. flask

  • 小而精 短小精悍 自带的组件和功能特别特别少 ,类似于游骑兵
  • 基本全部依赖于第三方组件
  • 不足之处:受限于第三方模块的影响比较大
  • 如果将flask所有第三方模块加起来 能够直接盖过django

3. tornado

  • 异步非阻塞 这个框架甚至可以用来开发游戏服务器

4. 三个框架的对比

	a:socket部分
b:路由匹配
c:模板语法 django:
a用的别人的wsgiref(django默认的)
b自己写的
c自己写的
flask:
a用的别人的werkzeug
b自己写的
c用的别人的jinja2
Tornado:
a,b,c都是自己写的

五、Django 框架

  • django是一个以开发app为主要功能的web框架
  • Django框架的生命周期流程图

1. 使用Django时的注意事项

  1. 计算机名称不能有中文

  2. python解释器不要使用3.7版本 推荐使用版本3.4~3.6

  3. 一个pycharm窗口 只能跑一个项目

  4. django版本问题

    • django版本以1.11.11为主(1.11.9~1.11.13)
  5. 如何检验django是否安装成功

    • 命令行敲 django-admin

2. 使用Django开发项目

(1)基本使用步骤:

创建Django项目——》创建应用——》配置Django项目的settings文件——》——》导“三板斧”模块(HttpResponse/render/redirect)——》自定义应用功能——》启动Django项目(启动服务端)

(2)具体使用步骤

  1. 通过命令行创建项目
******首先把当前路径切换到你要保存项目的路径******

1.创建django项目 (即创建文件夹):
django-admin startproject 项目名(例如mysite) 2.创建应用(django支持多app开发):
python3 manage.py startapp 应用名 3.创建templates文件夹:
创建到与应用文件夹同一级文件夹下,用于存放html文件 4.修改创建的Django项目的settings文件:
(1)将创建的app添加到INSTALLED_APPS,(2)并将templates文件夹的路径添加到TEMPLATES的'DIRS',如:'DIRS': [os.path.join(BASE_DIR, 'templates')]。在TEMPLATES中有一个'APP_DIRS': True,此参数表示debug模式。在Linux中,要把它设置为false 5.在应用文件夹的views文件中自定义应用功能函数
此时要导入render,HttpResponse,redirect“三板斧模块”,函数的形参要传入request参数。并将功能函数名添加到Django项目的urls文件的urlpatterns中。 6.启动django项目
首先要切换到Django项目文件夹下
输入命令: python3 manage.py runserver (命令第一个单词根据自己的python的在环境变量的名称来定)
或者输入:python3 manage.py runserver 127.0.0.1:8080
  1. 通过pycharm创建Django项目
  • 这种创建项目的方式要较为简便。他会自动帮我们创建templates文件夹,并且自动把这个文件夹的路径添加到TEMPLATES的'DIRS'中。也就是说我们可以省略方式一中的第三步,和第四步中的第二小步。其他步骤一致。只是不是用命令行创建。

3. Django项目各文件的功能

django项目名
项目同名的文件夹
settings.py 暴露给用户可以配置的配置文件
urls.py 路由与视图函数对应关系
manage.py django的入口文件
应用名文件夹
migrations文件夹 所有数据库相关的操作记录
admin.py django admin后台管理
apps.py 注册app使用
models.py 放所有数据库相关的模型类
tests.py 测试文件
views.py 处理业务逻辑的视图函数

4. Django基本三板斧

HttpResponse  返回字符串

		render        返回html文件
可以给html页面传值
def login(request):
user_dic = {'username':'jason','password':'123'}
return render(request,'login.html',{'xxx':user_dic}) redirect 重定向 1.直接写你本网站的路径后缀
2.也可以全路径 def home(request):
# return redirect('/login') # 重定向
return redirect('https://www.baidu.com') # 重定向

5. Django的重启机制

  • Django内部有检测机制 ,实时检测所有文件的变化。当我们在开发项目时,有时候会产生,你代码还没写完 就自动重启报错的情况,不用管。
  • 我们只需要在完善完功能后自己手动再重启一次即可。

最新文章

  1. PHP数组函数: array_walk()与 array_map() 的区别
  2. VS Code
  3. javascript中元素的scrollLeft和scrollTop属性说明
  4. michael的沟通秘籍
  5. Ubuntu 16.04 LTS U盘安装要点
  6. WScript中调用js方法
  7. [转]不用安装Oracle Client如何使用PLSQL Developer
  8. 【制作镜像Win*】系统配置
  9. Python3 高级特性
  10. Bzoj 1036: [ZJOI2008]树的统计Count 树链剖分,LCT
  11. PHP打开PDO_MySQL扩展的配置方法
  12. Google机器学习笔记(七)TF.Learn 手写文字识别
  13. (续)检测到有潜在危险的 Request.Form 值
  14. 简单Spring+Struts2+Hibernate框架搭建
  15. CSS选择器:伪类(图文详解)
  16. Java代码的编译与反编译那些事儿
  17. Jquery+H5验证数据(不是表单验证啊 )
  18. SSM-Netty实现软硬件通信,真实项目案例
  19. Centos7安装Openldap初级篇
  20. sklearn中的模型评估-构建评估函数

热门文章

  1. Python学习之==&gt;Socket网络编程
  2. UniEAP Platform V5.0建库
  3. PHP 异步执行方式
  4. 实现 laravel 的artisan
  5. noi.ac-CSP模拟Day5T1 组【二分图最大匹配】
  6. 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程
  7. 好问题:count(1)、count(*)、count(列)有什么区别?
  8. HDU-5471 Count the Grid
  9. 简单而粗暴的方法画任意阶数Bezier曲线
  10. hdu3829 二分匹配 最大独立集