码迷,mamicode.com
首页 > 其他好文 > 详细

Django基础(二)-视图,template

时间:2019-09-24 12:26:07      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:line   大写   link   数据   检测   页面跳转   参数   war   fir   

一、Django Views

http请求中产生两个核心对象:

  • http请求:HttpRequest对象
  • http响应:HttpResponse对象

所在位置:django.http,之前我们用到的参数request就是HttpRequest    检测方法:isinstance(request,HttpRequest)

1.1、HttpRequest对象

path:       #请求页面的全路径,不包括域名

method:     #请求中使用的HTTP方法的字符串表示。全大写表示。例如

                   if  req.method=="GET":

                             do_something()

                   elif req.method=="POST":

                             do_something_else()

GET:         #包含所有HTTP GET参数的类字典对象

POST:       #包含所有HTTP POST参数的类字典对象.服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用if req.POST来判断是否使用了HTTP POST 方法;应该使用  if req.method=="POST"

COOKIES:     #包含所有cookies的标准Python字典对象;keys和values都是字符串。

FILES:      #包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中              name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:

            filename:      上传文件名,用字符串表示
            content_type:   上传文件的Content Type
            content:       上传文件的原始内容

user:       #是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
             没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
             可以通过user的is_authenticated()方法来辨别用户是否登陆:
             if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
             时该属性才可用

session:    #唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。

#方法
get_full_path(),
比如:http://127.0.0.1:8000/index33/?name=123 ,
req.get_full_path()得到的结果就是/index33/?name=123
req.path 得到的结果是/index33

注意一个常用方法:request.POST.getlist(‘‘)

1.2、 HttpResponse对象

对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。HttpResponse类在django.http.HttpResponse

在HttpResponse对象上扩展的常用方法:

页面渲染:         render()(推荐)                 render_to_response(),
页面跳转:         redirect("路径")
locals():        #可以直接将函数中所有的变量传给模板

render与redirect区别:

#url.py
path(‘login/‘,views.login),
path(‘name_back/‘,views.name_back),

#views.py
def login(request):
    if request.method=="POST":
        if 1:
            return redirect("/name_back/")
            # name="AAA"
            # return render(request,"backend.html",locals())
    return render(request,"login.html",locals())

def name_back(request):
    name="AAA"
    return render(request, "backend.html", locals())

#login.html
<form action="/login/" method="post">
    <p>姓名<input type="text" name="username"></p>
    <p>性别<input type="text" name="sex"></p>
    <p>邮箱<input type="text" name="email"></p>
    <p><input type="submit" value="submit"></p>
</form>

#backend.html
<h1>用户{{ name }}你好</h1>

##总结render与redirect区别:
#   1 if render的页面需要模板语言渲染,需要的将数据库的数据加载到html,那么所有的这一部分
#     除了写在name_back的视图函数中,必须还要写在login中,代码重复,没有解耦.

#   2 the most important: url没有跳转到/name_back/,而是还在/login/,所以当刷新后
#     又得重新登录.

Django基础(二)-视图,template

标签:line   大写   link   数据   检测   页面跳转   参数   war   fir   

原文地址:https://www.cnblogs.com/hujinzhong/p/11577252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!