python django 请求和响应

python基础学习

  • 请求的4种传递数据的方式
    1.提取URL的特定部分,如/weather/beijing/2018,可以在服务器端的路由中用正则表达式截取;
    2.查询字符串(query string),形如key1=value1&key2=value2;
    3.请求体(body)中发送的数据,比如表单数据、json、xml;
    4.在http报文的头(header)中。

  • 请求方式–URL路径的参数
    1.如果想从URL中获取值,需要在正则表达式中使用分组,获取值分为两种方式

  • 位置参数:参数的位置不能错

  • 关键字参数:参数的位置可以变,跟关键字保持一致即可
    注意:两种参数的方式不要混合使用,在一个正则表达式中只能使用一种参数方式,分别使用以上两种获取URL值的方式提取出18 188
    http://127.0.0.1:8000/18/188/

# 对于关键字参数,只要名字能够对应就可以
def detail(requese,category_id,book_id)
# 在使用正则表达式的时候可以为参数起别名的形式,这样话在参数点颠倒的时候也会将数据传递至正确的位置
url(r'^(?p<category_id>\d+)/(?p<book_id>\d+)/$',detail,name='index')

获取request中的数据的代码格式

def detail(requese,book_id,category_id):
# 获取数据使用的是大写的GET,,后面的是获取字典中的数据的两种方式
    query_params=requese.GET;
    print(query_params);
    # 以普通的字典的形式来获取,一键多值的时候,只能获取字典中的最后的一个值
    # 如果是想要获取全部的值,我们就需要QueryDict中的list方法
    username=query_params['username'];
    password=query_params.get('password');
    print(username)
    print(password);
    return HttpResponse('detail');
  • 查询字符串的知识点
    HttpRequest对象的属性GET、POST都是QueryDict类型的对象
    与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况

方法get():根据键获取值
如果一个键同时拥有多个值将获取最后一个值
如果键不存在则返回None值,可以设置默认值进行后续处理

get(‘键’,默认值)
方法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值
如果键不存在则返回空列表[],可以设置默认值进行后续处理
getlist(‘键’,默认值)

  • post表单数据
####################### post表单数据 ################################
    data=requese.POST;
    print(data);
    print(data['username']);
    print(data.getlist('username'))
####################### post json 表单数据 ################################
    """
    Json是双引号,并且一定要注意加逗号的位置
    {
        "name":"itcast"
    }
    """
    # 实现的过程,首先接受json的数据,然后使用request.body接受,并且转换成为字符串的形式,然后使用
    # json的方法转化为字典的形式
    print(requese.POST);
    # 信息存存放在body中,并且当我们获取数据的时候一定要注意他的格式
    body=requese.body;
    print(body);
    # 是将获取的数据转化成为str类型,而不是字典的形式
    body_str=body.decode();
    print(body_str)
    print(type(body_str))
    # 将JSON字符串类型转换成为字典的形式,使用的函数是
    # json.dumps  将字典转换成为字符串的形式
    # json.loads  将字符串转换成为字典的形式
    data=json.loads(body_str)
    print(data);
####################### 请求头 表单数据 ################################
    # 请求头的内容
    print(requese.META);
    # 在这里严格的大小写
    content_type=requese.META["CONTENT_TYPE"];
    print(content_type);
    # 打印请求的方法
    print(requese.method);

json数据的写法

  • HttpResponse的知识点
####################### JsonResponse ################################
    data = {'name': 'itcast'};
    return JsonResponse(data)

####################### HttpResponse ################################
    data={'name':'itcast'};
    # HttpResponse
    """
        HttpResponse(content=响应体, content_type=响应体数据类型(是一个mime类型), status=状态码)
    """
    return HttpResponse(data);
    return HttpResponse('detail',status=400);
###################### 重定向 ################################
	 # 实现页面的跳转的功能
    return redirect("http://127.0.0.1:8000/index/")
    # 跳转到页面首页的实现,在此处使用的是真实的地址
    return redirect('/index/');
    # 跳转到首页,使用别名的形式进行获取首页的地址,在此处是获取的urls中的别名代表的真实的数据
    path=reverse('book:index');
    return redirect(path);
  • 状态保持

浏览器请求服务器是无状态的。
无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。
无状态原因:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。
有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等
实现状态保持主要有两种方式:
在客户端存储信息使用 Cookie(掌握),cookie是保存在客户端之中,换了浏览器之后数据并不会进行同步,并且cookie是基于域名(ip)的。
在服务器端存储信息使用 Session(掌握),session依赖于cookie,如果是浏览器禁用cookie就不会使用session

def set_cookie(request):
    username=request.GET.get('username');
    print(username)
    response=HttpResponse('set_cookies');
    response.set_cookie('username',username,max_age=3600);

    # 删除cookie的两种方式,首先利用函数的形式
    # response.delete_cookie(key)
    # response.set_cookie(key=,value=,max_age=0);
    
    return response
def get_cookie(request):
    cookies=request.COOKIES;
    username=cookies.get('username');
    print(username);
    return HttpResponse('get_cookies');

注册和登录对应的业务逻辑的流程:

# GET 请求 是获取登陆的界面
def show_login(request):
    return render(request);
# POST 请求 验证登录的界面
def veri_login(request):
    return  redirect("首页");

# 想要将登录和验证写在同一个函数中
def login(request):
    if request.method=='GET':
        return render(request);
    else:
        return redirect("首页");
    return HttpResponse("实现登录注册的逻辑界面");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值