1、django基本知识使用

响应对象

HttpResponse

respone = HttpResponse(content=响应体, content_type=响应体数据MIME类型, status=状态码)
respone['响应头key'] = 响应头值

JsonResponse【重点】

# 传递字典类型的数据   content_type: application/json
JsonResponse({"city":"广州"})
# 传递列表数据
JsonResponse([{"city":"广州"}, {'name': '北京'}], safe=False)

重定向

def resp(request):
   # 重定向到首页   状态码:302
   # HttpResponseRedirect
   return redirect('/index')

reverse函数【知道-用得较少】

动态地生成url地址,解决url重定向硬编码维护麻烦的问题
url配置:

# 项目的urls.py
url(r'^', include('users.urls', namespace='命名空间')),  
# 应用的urls.py
url(r'^index$', views.index, name='url配置项名'),
# 生成方式
url = reverse('命名空间:url配置项名称') 
<RegexURLPattern index ^index$>,
<RegexURLPattern None ^resp$>,
<RegexURLPattern None ^my_redirect$>, 
<RegexURLPattern None ^set_cookie$>, 

示例

# 项目的urls.py
url(r'^', include('users.urls', namespace='users')),  
# 应用的urls.py
url(r'^home$', views.index, name='index'),

def my_redirect(request):
    # 生成的url的值为 /home
	url = reverse('users:index') 
    return redirect(url) # 重定向

状态保存【理解】

cookie

特点:

  • 由服务器生成保存在客户端的键值对数据

操作

  • 保存cookie:使用 响应对象response.set_cookie('键', 值)

  • 读取cookie: 使用 request对象request.COOKIES.get('键)

    有效期:默认为关闭浏览器后 cookie 就失效

session

  • session工作原理

    1540633287434

    1537082090932

    • django默认保存session到数据库表中

    • 一条记录保存一个浏览器(一个用户)的所有的session键值对数据

    • 通过sessionid来区分不同的浏览器(不同用户)

  • 通过session相关命令

    request.session['键']=# 保存
    request.session.get('键')				  # 读取
    request.session.set_expiry(value)		  # 设置有效期,默认为2周
    del request.session['键']	              # 删除一个键值
    request.session.flush()  	# 删除当前访问用户所有session数据: 删除一条表记录
    request.session.clear()  	# 删除当前访问用户所有session数据: 清空字段中的值
    
  • session默认有效期:两周

Django是如何保存和注销用户登录状态的【扩展】

  • 管理后台登录界面

1537096113980

  • 登录成功调用login方法,通过session保存登录用户id

1537095898909

1537097093939

1537097143795

  • 注销一个用户会清除session数据

1537095848556

1537097368489

  • 登录之后,通过 request.user 就能得到登录用户对象

类视图

类视图使用【重点】

  • 定义类视图,继承View类,在类视图中定义get, post, put等相关方法

    class PostView(View):
        def get(self, request):
            return render(request, 'post2.html')
    
        def post(self, request):
            return HttpResponse('执行发帖操作')
    
  • 配置路由时,调用类视图的.as_view()方法

    urlpatterns = [
         ...
         url(r'^post2$', views.PostView.as_view()),
     ]
    

类视图使用装饰器

  • method_decorator: 为函数装饰器补充第一个self参数,使它可以应用到类的方法中。

方式1:

class PostView(View):
    def get(self, request):
        return render(request, 'post2.html')

    @method_decorator(check_ip)
    def post(self, request):
        return HttpResponse('处理发帖操作')

方式2:

@method_decorator(check_ip, name='get')
#@method_decorator(check_ip, name='dispatch')
class PostView(View):
    def get(self, request):
        return render(request, 'post2.html')

    def post(self, request):
        return HttpResponse('处理发帖操作')

中间件【理解】

作用:在视图执行前或执行后,作一些额外的操作,比如:

  • 在视图执行前判断ip是否为黑名单

中间件的执行顺序

1537083433726

中间件使用

  1. 定义中间件
class MyMiddleware(MiddlewareMixin):
    
    def process_request(self, request):
        print('before 视图')
        # 注意:可以返回None或者response对象,如果返回response对象,则视图函数就不会再执行了

    def process_response(self, request, response):
        print('after 视图')
        return response   	# 必须要有返回值
  1. 在settings文件中配置
MIDDLEWARE = [
     ...
     'middlewares.MyMiddleware',  # 注册中间件
 ]

request.user对象从何而来【扩展】

  • django提供了一个认证中间件

1537097998940

  • 在视图执行前会查询登录的用户对象

1537110334829

  • get_user方法:会取出用户id查去查询

1537098288600

  • 从session读取出用户id

1540647349390

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章