Flask相关用法

1,Flask安装

http://docs.jinkan.org/docs/flask/installation.html

2,Flask文件上传和下载

https://www.cnblogs.com/mosson/p/6163233.html#_label0

3,Flask中传递参数

### 传递参数:
传递参数的语法是:`/<参数名>/`。然后在视图函数中,也要定义同名的参数。例如:
@app.route('/article/<string:test>/')
# 传递的参数名是test,因此就需要在函数的形参中定义同名的参数test
def test_article(test):
    return 'test_article:{}'.format(test)

### 参数的数据类型:
1. 如果没有指定具体的数据类型,那么默认就是使用`string`数据类型。
2. `int`数据类型只能传递`int`类型。
限制参数:<int:article_id>,如果在浏览器中访问:http://127.0.0.1:5000/p/11111.0/
那就找不到报not found错误,因为我限制了是整形,你现在是浮点型,同理,如果你是浮点型,我使用
整形访问,那就又访问不到了

3. `float`数据类型只能传递`float`类型。

4. `path`数据类型和`string`有点类似,都是可以接收任意的字符串,
但是`path`可以接收路径,也就是说可以包含斜杠。
@app.route('/article/<path:test>/') path数据类型
def test_article(test):
    return 'test_article:{}'.format(test)

5. `uuid`数据类型只能接收符合`uuid`的字符串。`uuid`是一个全宇宙都唯一的字符串,
一般可以用来作为表的主键。

6.`any`数据类型可以在一个`url`中指定多个路径。例如:
@app.route('/<any(blog,article):url_path>/<id>/')
    def detail(url_path,id):
        if url_path == 'blog':
            return '博客详情:%s' % id
        else:
            return '博客详情:%s' % id

 4,Flask通过查询字符串的形式传递参数

#就是通过`?key=value`的形式传递的
# 通过问号的形式传递参数,例如百度:http://127.0.0.1:5000/d/?wd=%E7%AE%80%E4%B9%A6&pn=20
@app.route('/d/')
def d():
    wd = request.args.get("wd")
    page_number = request.args.get("pn")
    return "通过字符串查询的关键字为:{}, 页码为:{}".format(wd, page_number)

#针对这种情况,服务端使用reqeust.args来获取问号形式的查询字符串中参数的值。

 5,Flask获得端iP地址的方式

ip = request.remote_addr

 6, Flask获得服务器iP地址方式

ip = request.host

 7, Flask接收JSON文件的方法

#1,利用flask的request.form.get()方法
@app.route('/sendjson', methods=['POST'])
def sendjson():

# 接受前端发来的数据
data = json.loads(request.form.get('data'))

# lesson: "Operation System"
# score: 100
lesson = data["lesson"]
score = data["score"]

# 自己在本地组装成Json格式,用到了flask的jsonify方法
info = dict()
info['name'] = "pengshuang"
info['lesson'] = lesson
info['score'] = score
return jsonify(info)


JS:
<script>
    $(document).ready(function () {
    var data = {
         data: JSON.stringify({"lesson": "Operation System", "score": 100})
   }
      $.ajax({
        url:"/sendjson",
        type: 'POST',
        data: data,
        success: function (msg) {
            alert(msg.name)
        }
    })
  });
</script>

#2,利用flask的request.get_data()方法
@app.route('/sendjson2',methods=['POST'])
def sendjson2():

# 接收前端发来的数据,转化为Json格式,我个人理解就是Python里面的字典格式
data = json.loads(request.get_data())

# 然后在本地对数据进行处理,再返回给前端
name = data["name"]
age = data["age"]
location = data["location"]
data["time"] = "2016"

# Output: {u'age': 23, u'name': u'Peng Shuang', u'location': u'China'}
# print data
return jsonify(data)

JS:
<script>
    $(document).ready(function () {
        var student = new Object();
        student.name = "Peng Shuang";
        student.age = 23;
        student.location = "China";
        var data = JSON.stringify(student)

    $.ajax({
        url: "/sendjson2",
        type: "POST",
        data: data,
        success: function (msg) {
            alert(msg.time)
        }
    })
    })
</script>

 附Objective c 端传递JSON数据代码:

方案一 : 把JSON格式的字符串序列化成JSON的二进制
- (void)POSTJSON_01
{
    NSString *jsonStr = @"{\"name\":\"大发明家\"}";
 
    // 把JSON格式的字符串序列化成JSON的二进制
    NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
    [self postJsonWith:jsonData];
}


方案二 : 把字典序列化成JSON格式的二进制
- (void)POSTJSON_02
{
    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"亚索" forKey:@"name"];
 
    // 把字典序列化成JSON格式的二进制
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
    [self postJsonWith:jsonData];
}


方案三 : 把数组序列化成JSON格式的二进制
- (void)POSTJSON_03
{
    NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"牛头" forKey:@"name"];
    NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"石头人" forKey:@"name"];
    NSArray *arr = @[dict1,dict2];
 
    // 把数组序列化成JSON格式的二进制
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:0 error:NULL];
    [self postJsonWith:jsonData];
}


发送json数据到服务器的主方法,传入json数据的二进制
- (void)postJsonWith:(NSData *)jsonData
{
    // URL
    NSURL *URL = [NSURL URLWithString:@"http://localhost/php/upload/postjson.php"];
    // 请求
    NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:URL];
    // 设置请求方法
    requestM.HTTPMethod = @"POST";
    // 设置请求体
    requestM.HTTPBody = jsonData;
 
    // 发送请求
    [[[NSURLSession sharedSession] dataTaskWithRequest:requestM completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        // 处理响应
        if (error == nil && data != nil) {
 
            // 反序列化
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@",str);
 
        } else {
            NSLog(@"%@",error);
        }
    }] resume];
}

 

posted on 2019-03-25 15:58  CrazyQA  阅读(201)  评论(0编辑  收藏  举报

导航