Django视图响应

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()),
]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值