关于django中 cookie,session类视图,模板,模型的知识点
-
cookie知识点
1-特点:它是由服务器以键值对的形式存储在浏览器中,当浏览器发送请求时会自动携带这东西。
2-作为一名优秀的程序员可以通过HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)进行设置,设置成功后,浏览器就有了cookie,下次访问时会携带,于是我们就可以用请求对象request.COOKIES.get(“key值”)来获取到value值了,删除response.delete_cookie(“key值”) -
session 知识点
1-特点:session 分两部分存储,key值存在浏览器,value值存在服务器,下次浏览器发送请求过来,需要从浏览器中获取key,再根据key从redis中获取value,如果能获取到value说明校验成功。
2-使用request.session[“key值”]="value值"进行设置,然后通过request.session.get(‘键’,默认值)获取。
其他的一些方法:request.session.clear()清除value部分;request.session.flush()删除浏览器,服务器中存储的一切关于session信息;del request.session["key"值]删除指定的key值和value值。 -
类视图和中间件知识点
1-类视图就是把之前我们写过的单个视图函数写在一个类里面,定义好类之后,需要在urls里使用views.DemoView.as_view()进行注册才可以访问类视图,配置好之后看下面的代码
from django.views import View # 需要先导入View类,定义的子类需要继承她
from django.utils.decorators import method_decorator
class DemoView(View):
def get(self, request): # 类中定义的方法只能是请求方式,不能瞎胡写的,如果你瞎比写会访问不到,
# 因为它是根据浏览器的请求方式来选择调用哪个方法的
return HttpResponse(‘我只接收GET请求’)def post(self, request): return HttpResponse('我只接收post请求') # 上面的代码虽然优雅一些,但是还可以进一步优化。比如下面的例子 # 定义一个闭包函数,func表示被装饰的类视图,在闭包里可以完成一些任务逻辑处理,比如验证 def outer(func): def inner(request,*args,**kwargs): return func(request,*args,**kwargs) return inner # 下面使用装饰器的方式装饰类视图 # @method_decorator(自定义的装饰器outer,name指定要执行的视图函数,如果全部执行就写dispatch) @method_decorator(outer, name='dispatch') class DemoView(View): def get(self, request): print('get方法') return HttpResponse('ok') def post(self, request): print('post方法') return HttpResponse('ok')
2-中间件就类似于FLASK中的请求钩子,它使用闭包函数的方式实现,可以在原视图函数执行前,执行后添加业务处理,然后再返回响应。
def middleware(func):
def inner(request,*args,**kwargs):
print(“原函数之前先验证”)
resp=func(request,*args,**kwargs)
print(“原函数之后再添加些内容”)
return resp
return inner
# 上面就是定义好了一个中间件,然后需要在settings.py注册中间件就可以全局使用了,你会发现不管你访问哪个视图函数都会先执行print()函数。
MIDDLEWARE = [
‘django.middleware.security.SecurityMiddleware’,
“user.views.middleware” #### 注册中间件
]
3-模板的语法跟FLASK一样,Django中需要配置一些信息而已,相对简单
#第一步 在settings.py中配置模板文件夹的路径。
TEMPLATES = [
{
‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)], # 此处修改,templates是你新建的文件夹
# 第二步 在templates文件夹下新建HTML文件,定义视图函数,返回数据给模板
def temp(request):
data={“book”:“张良”}
resp=loader.get_template(“index.html”) # 通过这个方法返回的是模板对象。
html_data=resp.render(data) # 通过模板对象的render方法,返回经过渲染的文本字符串
return HttpResponse(html_data) # 将结果返回
4-使用django进行数据库开发的步骤如下:-
配置数据库连接信息(1-需要手动指定数据库的连接操作,安装pymysql,在根路径的init文件中写代码:
from pymysql import install_as_MySQLdb
install_as_MySQLdb()
# 写好之后就表示数据了连接成功了,接下来在settings.py中配置数据库信息
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘HOST’: ‘127.0.0.1’, # 数据库主机
‘PORT’: 3306, # 数据库端口
‘USER’: ‘root’, # 数据库用户名
‘PASSWORD’: ‘mysql’, # 数据库用户密码
‘NAME’: ‘django_demo’ # 数据库名字
}
} -
在models.py中定义模型类
from django.db import models#定义图书模型类BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名称') bpub_date = models.DateField(verbose_name='发布日期')# verbose_name相当于起的别名。 bread = models.IntegerField(default=0, verbose_name='阅读量') bcomment = models.IntegerField(default=0, verbose_name='评论量') is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta: db_table = 'tb_books' # 指明数据库表名 verbose_name = '图书' # 在admin站点中显示的名称 verbose_name_plural = verbose_name # 显示的复数名称 def __str__(self): """定义每个数据对象的显示信息""" return self.btitle
-
迁移命令只有2行就能搞定- -!
python manage.py makemigrations
python manage.py migrate -
通过类和对象完成数据增删改查操作
-