欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  一、Web前端与后端(PythonWeb)
 
  1.Web前端:网页,包含HTML,CSS,JS。
 
  静态网页:不能与服务器交互的网页
 
  动态网页:能够与服务器交互的网页
 
  2.Web后端:、Flask,Django、Ajax技术
 
  二、服务器
 
  1.服务器:为用户提供服务的计算机,将数据抽象成URL,以供用户访问。
 
  2.组成:
 
  硬件:主机
 
  软件:能够处理用户请求的程序:Apache、Tomcat、IIS(InternetInformationService)、Nginx
 
  3.作用:
 
  存储Web相关的数据
 
  处理请求和响应
 
  具备安全性
 
  三、框架
 
  框架:为了解决一些开放性问题,重复性问题而产生的程序结构
 
  框架模式:
 
  MVC
 
  M:模型层Model,与数据库打交道
 
  V:视图层View
 
  C:控制层Controller,处理请求与响应
 
  MTV(Flask)
 
  M:模型层Model
 
  T:Template模板(HTML模板),
 
  V:View视图层,处理请求与响应
 
  四、Flask使用
 
  1.Flask是一个基于Python并依赖于Jinja2模板引擎和WerkZeugWSGI服务的框架。
 
  WSGI:WebServerGatewayInterface.Web服务网关接口,提供处理网络请求相关的功能
 
  路由:为了匹配用户的请求地址,会自动执行视图函数,视图函数中必须有返回值,返回字符串显示到相应的页面中。
 
  1、定义路由及视图函数
 
  @app.route('/地址')
 
  deffuncName():
 
  return""#响应到页面中的内容
 
  #视图函数
 
  @app.route("/")
 
  defindex():#匹配到路径后执行的视图函数
 
  return"<h1>欢迎</h1>"
 
  2、定义带参数的路由
 
  变量:<变量名>
 
  @app.route("/login/<name>/<age>")
 
  deflogin(name,age):
 
  return"%s,%s"%(name,age)
 
  注意:路径中的参数变量永远是字符串类型
 
  @app.route('/login/<name>/<age>')
 
  deflogin(name,age):
 
  return"<h1>欢迎登录,%s,%s</h1>"%(name,age)
 
  3、类型转换器
 
  缺省字符串,不能包含'/'
 
  int:转换整数
 
  float:转换小数
 
  path:字符串,允许包含'/'
 
  使用:
 
  @app.route('/show/<int:num>')
 
  @app.route('/calcute/<int:n1>/<int:n2>')
 
  defcalcute(n1,n2):
 
  #n1=int(n1)
 
  #n2=int(n2)
 
  n3=n1+n2
 
  return"%d+%d=%d"%(n1,n2,n3)
 
  4、多个URL执行同一个视图函数
 
  @app.route('/')
 
  @app.route('/index')
 
  defindex():
 
  return"首页"
 
  @app.route('/show')
 
  @app.route('/show/list')
 
  @app.route('/show/<name>')
 
  defshow(name="ze"):
 
  return"show%s"%name
 
  注意:
 
  如果在app.run()设置host="0.0.0.0";不影响当前虚拟IP(127.0.0.1);可以让当前局域网中其他的计算机,通过内网IP访问服务器
 
  模板
 
  模板是一种特殊的HTML文件,Python+html网页结构,允许在HTML文件中定义变量,定义流程控制。使用模板可以使视图函数专注于处理业务逻辑,将页面渲染交由模板控制。
 
  2.使用
 
  导入render_template
 
  在视图函数中使用render_template("模板文件"),生成模板字符串,交由浏览器解析
 
  所有的模板文件必须存在名为"templates"的文件下
 
  变量代码块
 
  1)模板中使用变量,语法{{变量名(key)}}
 
  2)从视图函数中获取相关的变量,传递到模板文件中。
 
  returnrender_template("模板文件",key1=value1,key2=value2)
 
  函数中可以传递若干键值对,其中的key名就是在模板文件中使用的变量名
 
  视图函数中定义变量name=""、age=、dic=、tub、list将数据传递到模板文件中显示
 
  defshow():
 
  name="xb"
 
  returnrender_remplate("",uname=name)
 
  模板文件中使用{{uname}}
 
  #模板
 
  @app.route('/info')
 
  definfo():
 
  #返回模板文件,可以传递变量
 
  #render_template("")返回模板字符串
 
  print("%s",render_template("01-show.html"))
 
  #returnrender_template("000.html")
 
  #returnrender_template("001.html",uname=name,list=list)
 
  returnrender_template("01-show.html",name="flask",age=20)
 
  01-show.html
 
  <!DOCTYPEhtml>
 
  <htmllang="en">
 
  <head>
 
  <metacharset="UTF-8">
 
  <title>Title</title>
 
  </head>
 
  <body>
 
  <h1>模板</h1>
 
  <h1>{{uname,list[0]}}}</h1>
 
  </body>
 
  </html>
 
  最后把代码汇总一下
 
  fromflaskimportFlask,render_template
 
  app=Flask(__name__)#创建Flask的程序实例
 
  #视图函数
 
  @app.route("/")
 
  defindex():#匹配到路径后执行的视图函数
 
  return"<h1>欢迎</h1>"
 
  @app.route('/login/<name>/<age>')
 
  deflogin(name,age):
 
  return"<h1>欢迎登录,%s,%s</h1>"%(name,age)
 
  @app.route('/calcute/<int:n1>/<int:n2>')
 
  defcalcute(n1,n2):
 
  #n1=int(n1)
 
  #n2=int(n2)
 
  n3=n1+n2
 
  return"%d+%d=%d"%(n1,n2,n3)
 
  @app.route('/show')
 
  @app.route('/show/list')
 
  @app.route('/show/<name>')
 
  defshow(name="ze"):
 
  return"show%s"%name
 
  #模板
 
  @app.route('/info')
 
  definfo():
 
  #返回模板文件,可以传递变量
 
  returnrender_template("01-show.html",name="flask",age=20)
 
  if__name__=="__main__":
 
  app.run(debug=True)
 
  3)、使用locals()返回字典,包含所有局部变量
 
  returnrender_template("003.html",params=locals())
 
  params=locals()
 
  #{
 
  #'tup':('ZX','DB'),
 
  #'name':'老Q',
 
  #'dic':{'age':30,'name':'Maria'},'list':['保健','唱K'],
 
  #'age':30
 
  #
 
  #}
 
  模板文件local.html
 
  <!DOCTYPEhtml>
 
  <htmllang="en">
 
  <head>
 
  <metacharset="UTF-8">
 
  <title>Title</title>
 
  </head>
 
  <body>
 
  <h1>{{params["name"]}}</h1>
 
  <h1>列表,元组和字典都可以使用[key/index]和点语法访问</h1>
 
  <h1>{{params.name}}</h1>
 
  <h1>小泽{{params.dic.name}}</h1>
 
  <h1>爱好:{{params.list[0]}}</h1>
 
  <h1>爱好:{{params.list.0}}</h1>
 
  <h1>数据库:{{params.tup[1]}}</h1>
 
  <h1>数据库:{{params.tup.1}}</h1>
 
  <h1>宠物名:{{params.cat.name}}</h1>
 
  <h1>{{params.cat.play()}}</h1>
 
  </body>
 
  </html>
 
  4)、过滤器
 
  允许模板中的变量在输出之前修改成其他的值,修改显示分类:
 
  upper转大写字母lower转小写字母
 
  title首字母大写first获取列表中第一个
 
  last获取最后一个length获取列表长度
 
  default()如果变量未赋值,可采用默认值trim去掉字符串两端的空格
 
  语法:{{变量|过滤器1|过滤器2}}
 
  #python中的语言
 
  list=["保健","唱K"]
 
  s1="helloworld"
 
  s2="hello"
 
  模板文件local.html
 
  <h1>过滤器</h1>
 
  <h2>upper:{{params.s1|upper}}</h2>
 
  <h2>title:{{params.s1|title}}</h2>
 
  <h2>参考:{{params.s2}}</h2>
 
  <h2>参考:{{params.s2|trim}}</h2>
 
  <h2>first:{{params.list|first}}</h2>
 
  <h2>length:{{params.list|length}}</h2>
 
  <p>
 
  在模板中使用变量,如果视图函数中未传递相应的值,
 
  可以使用default过滤器设置变量默认的值
 
  </p>
 
  <h2>default_test:{{params.test|default("test")}}</h2>
 
  4、控制代码块
 
  在模板文件中书写条件语句和循环语句,使用:{%%}
 
  if语句
 
  {%if条件%}
 
  条件成立时执行,允许书写静态标签,也可以书写变量
 
  {%endif%}
 
  if-else语句:
 
  {%if条件%}
 
  条件成立时执行
 
  {%else%}
 
  条件不成立时执行
 
  {%endif%}
 
  多重分支语句
 
  {%if条件1%}
 
  {%elif条件2%}
 
  ..
 
  {%else%}
 
  {%endif%}
 
  for语句
 
  {%for变量in可迭代元素%}
 
  {%endfor%}
 
  [{"name":"","age":30},{"name":"","age":30},{"name":"","age":30},]
 
  循环的内部变量:loop
 
  直接在循环内部使用,表示本次循环相关的信息
 
  loop.index:表示当前循环的次数,默认从1开始计
 
  loop.index0:表示当前循环的次数,从0开始计
 
  loop.first:表示是否为第一次循环,值为true表示第一次循环
 
  loop.last:表示是否为最后一个循环
 
  <p>for循环</p>
 
  {%foruserinparams.info%}
 
  <h3
 
  {%ifloop.firsh%}
 
  class="c1"
 
  {%elifloop.last%}
 
  class="c2"
 
  {%else%}
 
  class="c3"
 
  {%endif%}
 
  >姓名:{{user.name}},年龄:{{user.age}}</h3>
 
  {%endfor%}
 
  5、静态文件
 
  不与服务器交互的文件都是静态文件(css,js,图片,音视频等),所有的静态文件都必须存储在一个名为"static"的文件夹下,Flask程序会自动查找,
 
  静态文件的访问:必须使用"/static/子路径"访问
 
  url_for("视图函数名")实现反向解析路由:根据指定的视图函数返回对应的地址
 
  使用:
 
  根据视图函数解析对应的URL
 
  #url_for("login")#"/login"
 
  反向解析带参数的路由,函数中接收多个参数
 
  #url_for("login",uname="Maria",upwd="123"))
 
  #"/login/Maria/123"
 
  自动生成静态文件的路径
 
  #"/static/css/base.css"
 
  href="{{url_for('static',filename="css/base.css")}}">
 
  练习:
 
  创建新的项目,名称Blog
 
  手动创建"templates"和"static"文件夹
 
  将博客项目中的html文件复制到templates中,
 
  所有的静态文件复制到static中
 
  注册路由,访问首页和列表页
 
  处理静态文件的访问路径(ctrl+F,ctrl+R)
 
  6、模板的继承
 
  (与类的继承相似)如果两个页面中大部分内容与结构都一致,可以采用模板继承
 
  父模板:指定可以被子模板重写的内容
 
  {%block块名%}
 
  <h1>父模板</h1>
 
  {%endblock%}
 
  子模板中继承父模板
 
  {%extends"父模板名称"%}
 
  子模板中可以重写父模板中指定块的内容
 
  {%block块名%}
 
  <h1>子模板</h1>
 
  {%endblock%}

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56372.shtml