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);
- 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("实现登录注册的逻辑界面");