本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Django关于图片存储和读取问题
一般情况下,我们上传的图片会保存在 media 这个文件夹下面,在访问网页的时候我们就会读取其中的照片。今天就是来做这样一个例子:
1,在项目的目录下,新建media目录文件,配置setting.py
# 设置上传文件的路径
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media') #指定根目录
2,在model中配置上传的属性
image = model.ImageField("logo", upload_to='org/%Y/%m',max_length=100)
# 提示, 这里的意思是定义一个上传图片的属性,将文件的内容上传到org/%Y/%m 这个文件件下面,最大的文件名长度是100,%Y是当前的年份创建文件夹,%m是当前的月份创建文件夹
3当前这只是前奏,还有以一系列步骤需要完成,接下来到setting.py 继续进行配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# 添加这一行,可以理解为中间件的意思
'django.template.context_processors.media',
],
},
},
]
还没有完哟,有人肯定想,真麻烦,还有最后一步 url.py里面配置
# 处理图片显示的url,使用Django自带serve,传入参数告诉它去哪个路径找,我们有配置好的路径MEDIAROOT
re_path(r'^media/(?P<path>.*)', serve, {"document_root": MEDIA_ROOT}),
Django的Form校验机制
Django在前后端交互的时候经常使用到post提交,而在提交的时候我们经常需要验证表单是否为空,是否长度符合要求
- 在后台代码里面做过滤潘丹
- 使用Django的form过滤功能
django的form过滤机制
例如我们今天就要对这个登录做验证
1,在app下新建 forms.py 文件,添加以下内容
class LoginFrom(forms.Form):
# 这个字段必须有,没有就报错 required=True
username = forms.CharField(required=True)
password = forms.CharField(required=True, min_length=5)
记住这里的命名要和html文件中字段的命名要一致
2,在视图函数中调用
login_form = LoginFrom(request.POST)
if login_form.is_valid():
# 字段要一致
user_name = request.POST.get("username", "")
pass_word = request.POST.get("password", "")
# 如果输入合法 login-from_is_valid()返回的就是 True
自定义Django过滤器标签
django的过滤器很多,自带的过滤器能满足我们绝大部分的工作要求,但是当我们有特别的需求的时候就需要自定义了。
创建templatetags文件夹
注意,这个文件夹的名字是唯一的,不能更改成其他名字,文件夹在创建完成之后会新建一个__init__.py文件,再在此文件夹下面创建一个python文件,这个名字可以自定义
#myfilters.py文件的内容
from django import template
# 创建一个Library类的对象
register = template.Library()
# 自定义过滤器,至少要有一个参数,最多两个参数
@register.filter(name="mod")
def mod(num):
'''判断num是否为偶数'''
return num % 2 == 0
@register.filter(name="mod_val")
def mod_val(num,val):
'''判断nume是否能被val整除'''
return num%val == 0
- 过滤器其实就是python的函数
- 自定义过滤器目前支持1个参数和两个参数的,不支持其他
- 一个参数就是过滤器前面的变量{% if value|mod%}
- 完成函数的功能要对函数进行注@register.filter(name="mod_val")
<!DOCTYPE html>
{% load myfilters %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for value in values %}
{% if value|mod %}
{{value}}是偶数<br>
{% else %}
{{value}}是奇数数
{% endif %}
{% endfor%}
</body>
</html>
- 调用的时候要先导入过滤器的包{% load myfilters %}
- 使用的时候还是跟系统的过滤器是一样的用法
Cookies和session
cookie是保存在浏览器中的一段文本信息,例如保存登录过程中的用户名和密码,cookie是可以设置 过期时间,也可以在浏览器中主动的去清除cookie
# 进行登录验证
if username =='hongbiao' and password== '123456':
# 判断是否需要记住用户名
response = redirect('/index3') # redirect 返回的是一个HttpSponse对象
if remember =='on':
# 设置过期时间 这里是1天
response.set_cookie("username",username,max_age=3600*24*1)
response.set_cookie("password",password,max_age=3600*24*1)
return response
# return redirect('/index3') HttpResponse
# 再次登录的时候获取cookie,可以记住用户名和密码
def login(request):
# 获取cookie 如果cookie中的存在这个cookie则获取
if 'username' in request.COOKIES:
username = request.COOKIES['username']
password = request.COOKIES['password']
else:
username = ''
password = ''
return render(request, 'booktest/login.html', {'username':username,'password': password})
Session是保存在服务器上的一段文本数据,用来进行校验的
def get_session(request):
# 获取seession
username = request.session['username']
password = request.session['password']
age = request.session['age']
return HttpResponse(username+':'+password+":"age)
def set_seesion(request):
# 设置session
request.session['username'] = 'hongbiao'
request.session['password'] = '123456'
request.session['age'] = 'age'
def clear_session(request):
# 清除session的相关信息
request.session.clear()
return HttpResponse("清除成功")
session的相关操作
# 1,以键值对的额形式写session
request.session['键'] = '值'
# 2,根据键值对读取数据
request.session.get('键', '默认值')
# 3, 清除所有的session,在存储中删除部分
request.session.clear()
# 4, 情书session数据,在存储中删除session的整条数据
request.session.flush()
# 5,删除session中的指定键及值,在存储中只删除某个键及对应的值
del request.session[‘键’]
# 6,设置会话时间,如果在没有指定过期事件则两个星期后过期
request.session.set_expiry(value)
# 7,判断是否有这个session
request.session.has_key('isLogin')