首页 > GAME > 游戏 > 正文

鄂州淌蹲卵新能源有限公司,吕梁胀延机械设备有限公司,东莞谄挥在有限公司

男人只得起身,伤的位置从肩膀一直向下,接近胸口位置,医者仁心,不该有任何杂念,一切只是为了救死扶伤,不过是说着好听罢了。

类似包图网的网站

从这个角度上说,他感谢这次事变,让他能够静下心反思自己的不足和薄弱,否则,他不知要到什么时候才会发现自己的问题,不过,人才不足的局面不是一天两天就可以改变,需要一段时期,尤其他进入大唐权力中心,消除世人对他的偏见。
说完,大师深深的看了玉天恒一眼,又在他的肩膀上拍了拍,转身朝着黑暗中走去。

一股非常霸道的力量,从东方不亮身上迸射出来,激荡的周围空气都发出了啵啵的爆响。

1.1.第一个flask程序

from flask import Flask
#创建一个Flask对象,传递__name__参数进去
app = Flask(__name__)

#url与视图映射
@app.route("/")
def hello_world():
    return "Hello World!"


if __name__ == "__main__":
    app.run()   #flask中的一个测试应用服务器

浏览器访问:http://127.0.0.1:5000/,也可以更改端口号: app.run(port=5001)

 

1.2.debug模式

 作用:

  • 如果抛出异常,在浏览器中可以看到具体错误信息
  • 在修改代码后,只要按“ctrl+s”,就会自动重启项目,不用手动重新运行

四种配置方式

第一种

if __name__ == "__main__":
    app.run(debug=True)  

第二种

app.debug = True

第三种

app.config.update(DEBUG=True)

第四种

新建config.py

DEBUG = Ture

然后在主程序总导入引用

import config

app.config.from_object(config)   
from flask import Flask
import config
#创建一个Flask对象,传递__name__参数进去
app = Flask(__name__)
# app.debug = True   #第二种
# app.config.update(DEBUG=True)  #第三种
app.config.from_object(config)   #第四种

#url与视图映射
@app.route("/")
def hello_world():
    print("helloworkl")
    return "Hello World!"

if __name__ == "__main__":
    # app.run(debug=True)   #第一种
    app.run()
四种方式

 

1.3.配置文件

新建config.py

DEBUG =True

主程序中两种引用方式

第一种:

import config

app.config.from_object(config)  

第二种

app.config.from_pyfile("config.py")

 

1.4.url传参方式

普通传参方式

@app.route("/p/<id>/")
def article_detail(id):
    return "你访问的文章第%s篇"%id

指定参数类型

有以下几种类型:

  • string:默认的数据类型
  • int:接受整形
  • float:浮点型
  • path:和string的类似,但是接受斜杠
  • any:可以指定多个路径
  • uuid:只接受uuid字符串

 (1)any

@app.route("/<any(blog,user):url_path>/<id>")
def detail(url_path,id):
    if url_path == "blog":
        return "博客详情%s"%id
    else:
        return "用户详情%s"%id

 

 

 (2)path

@app.route("/article/<path:test>/")
def test_article(test):
    return "test_article:{}".format(test)

获取参数

from flask import Flask,request

@app.route("/tieba/")
def tieba():
    wd = request.args.get("wd")
    return "获取的参数的是%s"%wd

1.5.url_for的使用

(1)通过视图函数解析出url

from flask import Flask,url_for

@app.route("/")
def hello_world():
    return url_for("my_list",page=2)   #url_for里面:第一个是视图函数,第二个是url需要的参数

@app.route("/list/<page>/")
def my_list(page):
    return "my_list"

(2)url_for里面多的参数会当做搜索字符

@app.route("/")
def hello_world():
    return url_for("my_list",page=2,count=2)   

@app.route("/list/<page>/")
def my_list(page):
    return "my_list"

1.6.Response

 视图函数中可以返回的类型

  • 可以返回字符串,返回的字符串其实底层将这个字符串包装成了一个‘Response’对象
  • 可以返回元组,形式(响应体,状态码,头部信息),返回的元组其实底层将这个字符串包装成了一个‘Response’对象
  • 可以返回Response及其子类

实现一个自定义的Response对象

  • 继承自、‘Response’类
  • 实现方法‘force_type’
  • 指定‘app.response_class’为你自定义的‘Response’对象
  • 如果视图函数返回的数据,不是字符串,也不是元组,也不是Response对象,那么就会将返回值传给‘force_type’,然后将‘force_type’的返回值返回给前端 

实例:

from flask import Flask,url_for,Response,jsonify

app = Flask(__name__)

class JsonResponse(Response):

    @classmethod
    def force_type(cls, response, environ=None):
        """
        这个方法只有视图函数返回非字符、非元祖、非Response对象才会调用
        :param response:
        :param environ:
        :return:
        """
        #把字典转换成json
        if isinstance(response,dict):
            #jsonify将字典转换成json对象,还将该对象包装成了一个Response对象
            response = jsonify(response)
        return super(JsonResponse, cls).force_type(response,environ)

app.response_class = JsonResponse


@app.route("/")
def hello_world():
    return "Hello world"

@app.route("/list1/")
def list1():
    return Response("list1")  #合法对象,直接返回

@app.route("/list3/")
def list3():
    return {"username":"derek","age":18}   #返回的是非字符、非元祖、非Response对象,所以执行force_type方法

if __name__ == "__main__":

    app.run(debug=True)
因为/list3/返回的是字典类型,非字符、非元祖、非Response对象,所以执行force_type方法

1.7.add_url_rule

源码

主程序

from flask import Flask,render_template,url_for

app = Flask(__name__)
app.config.update({
    "DEBUG":True,
    "TEMPLATES_AUTO_RELOAD":True
})

@app.route("/",endpoint="index")   
def hello_world():
    print(url_for("derek_list"))    #通过endpoint找到对应的url   /list/
    return render_template("index.html")

def my_list():
    return "列表页"

#三个参数
#1.url
#2.给url起个别名,如果没有指定endpoint,则默认使用视图函数的名字作为endpoint的值
#3.视图函数
app.add_url_rule("/list/",endpoint="derek_list",view_func=my_list)

with app.test_request_context():
    print(url_for("index"))    # /

if __name__ == "__main__":
    app.run()

1.8.类视图

之前使用的视图都是函数,简称为视图函数,视图也可以基于类来实现,类视图的好处是支持继承,类视图需要通过app.add_url_role(url_rule,view_func)来进行注册,类里面要加装饰器就用:detactors=[]   ,里面可以添加多个装饰器

 (1)标准视图

  • 继承views.VIew
  • 必须实现‘dispatch_request’方法,以后请求过来后,都会执行这个方法,返回值相当于视图函数一样,必须返回"Response"或者子类的对象,或者是字符串,或者是元祖
  • 必须通过app.add_url_role(url_rule,view_func)来做url与视图的映射

实例

from flask import Flask,url_for,views

app = Flask(__name__)
app.config.update({
    "DEBUG":True,
    "TEMPLATES_AUTO_RELOAD":True
})

class ListView(views.View):
    def dispatch_request(self):
        return "我的列表页"

# 1.ListView.as_view("list")里面必须传个参数‘name’,给view_func起个别名,实际上就是dispatch_request函数
# 2.endpoint也可以不指定,则默认使用view_func的别名(name参数的值)
app.add_url_rule("/list/",endpoint="list",view_func=ListView.as_view("list"))


@app.route("/")
def hello_world():
    return "Hello World!"

with app.test_request_context():
    print(url_for("list"))    #/list/

if __name__ == "__main__":
    app.run()

(2)通过类的继承实现多个视图返回json数据

from flask import Flask,url_for,views,jsonify

app = Flask(__name__)
app.config.update({
    "DEBUG":True,
    "TEMPLATES_AUTO_RELOAD":True
})

#父类,把数据转换成json格式
class JsonView(views.View):
    def get_data(self):
        raise NotImplementedError

    def dispatch_request(self):
        return jsonify(self.get_data())

#子类只需要写get_data方法
class ListView(JsonView):
    def get_data(self):
        return {"usernmae":"derek","age":18}

app.add_url_rule("/list/",endpoint="list",view_func=ListView.as_view("list"))


@app.route("/")
def hello_world():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

  (3)基于调度方法的类视图 

class LoginView(views.MethodView):
    def __render(self,error=None):
        return render_template("login.html", error=error)

    def get(self,error=None):
        return self.__render()

    def post(self):
        username = request.form.get("username")
        password = request.form.get("password")
        if username == "derek" and password == "123":
            return "登录成功"
        else:
            return self.__render(error="用户名或密码错误")

app.add_url_rule("/login/",view_func=LoginView.as_view("login"))

 

编辑:平华文

当前文章:http://dongkebqk.biz/49019/index.html

发布时间:2018-11-17 09:00:47

电脑日赚10-20 社会上挣钱的路子 赚米网神话接码 上岸好路子 微信公众号模板 网络棋牌论坛 赚钱最快的网络游戏 微信答题平台


声明:所发布的内容均来源于互联网,目的在于传递信息,但不代表本站赞同其观点及立场,版权归属原作者,如有侵权请联系删除。

手机赚钱工资日结是真的吗

/pics/gvyag2tbuqz-83140.jpg