Django的视图响应
1、 视图响应
视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。
访问django路由时,响应的
1、 HttpResponse
可以使用django.http.HttpResponse来构造响应对象。
HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
def show_student1(request):
# 使用all() 方法
stu_list = Student.objects.all()
print(stu_list)
# 把查询 出来的内容返回到页面中
# render(request, '模版地址', '返回时要带的参数')
# return render(request, 'show_student.html', {'stu_list': stu_list})
stu_data = [{'id': i.pk, 'name': i.name, 'sex': i.sex, 'address': i.address} for i in stu_list]
return HttpResponse(json.dumps(stu_data, ensure_ascii=False))
JsonResponse
def show_student2(request):
# 查询 所有的学生信息
# 使用all() 方法
stu_list = Student.objects.all()
print(stu_list)
# 把查询 出来的内容返回到页面中
# render(request, '模版地址', '返回时要带的参数')
# return render(request, 'show_student.html', {'stu_list': stu_list})
stu_data = [{'id': i.pk, 'name': i.name, 'sex': i.sex, 'address': i.address} for i in stu_list]
return JsonResponse(stu_data, safe=False, json_dumps_params={'ensure_ascii': False})
HttpResponseRedirect
重定向
1、在models.py 下新建用户模型
class User(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=128)
def __str__(self):
return self.username
2、 在admin.py中进行注册,用admin后台管理添加用户
# 导入用户模型
from .models import User
admin.site.register(User)
3、在admin后台,添加用户信息
4、 写个login.html页面,进行登录
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<form action="" method="post">
{% csrf_token %}
<p>username: <input type="text" name="username"></p>
<p>password: <input type="password" name="password"></p>
<input type="submit" value="登录">
</form>
</div>
</body>
</html>
5、写个views.py,处理登录逻辑
-
使用get请求进行页面渲染
# 如果请求方法为get,返回登录页面 def login(request): if request.method == 'GET': return render(request, 'login.html')
-
添加路由
from django.urls import path from . import views app_name = 'app01' urlpatterns = [ path('login/', views.login), # 展示学生 ]
-
使用post方法获取数据,并进行重定向
def login(request): if request.method == 'GET': return render(request, 'login.html') elif request.method == 'POST': # 获取post提交的数据 print(request.POST) username = request.POST.get('username') password = request.POST.get('password') # 通过用户名,过滤user对象,获取他的第一条数据.first(),用来判断用户是否存在 # filter当中:第一个username是User下面的字段,第二个username是post提交的数据变理 user_obj = User.objects.filter(username=username).first() print('获取到的用户信息:', user_obj) # 如果用户存在,并且密码正确 if user_obj and password == user_obj.password: # 用户存在,并且密码正确时,跳转页面到主页 return redirect('app01:show_student') else: return render(request, 'login.html', {'msg': '登录失败'})
3、 类视图
需要继承View:
from djago.views import View
导包规则:
最上面导django自带的包
中间空一行,导Python包
最下面空一行,导自已写的包
class LoginView(View):
def get(self, request):
return render(request, 'login.html')
def post(self, request):
print(request.POST)
username = request.POST.get('username')
password = request.POST.get('password')
user_obj = User.objects.filter(username=username).first()
if user_obj and password == user_obj.password:
return redirect('app01:show_student')
else:
return render(request, 'login.html', {'msg': '登录失败'})
类视图路由写法
from django.urls import path
from . import views
app_name = 'app01'
urlpatterns = [
path('login1/', views.LoginView.as_view()),
]
**类视图路由写法**
```python
from django.urls import path
from . import views
app_name = 'app01'
urlpatterns = [
path('login1/', views.LoginView.as_view()),
]