同台服务器端口不同,协议不同,服务器不同
1. 前台与后台有跨域问题, 解决跨域
安装django-cors-headers模块
在settings.py中配置
# 注册app
INSTALLED_APPS = [
...
'corsheaders'
]
# 添加中间件
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware'
]
# 允许跨域源
CORS_ORIGIN_ALLOW_ALL = True
2. 前台代码
$.ajax({
url: 'http://127.0.0.1:8731/login/',
type: 'post',
data: {
usr: 'abc',
pwd: '123'
},
success: function (data) {
console.log(data);
// 可以完成页面的局部刷新
Title 主页
download
下载
ef upload(request):
files=request.FILES.get('file',None)
# for i in files:
with open(files.name,'wb')as f:
for line in files:
f.write(line)
return HttpResponse('ok')
def download(request):
file= open('5.服务器端2.py','rb')
response=FileResponse(file)
response['Content-Type'] = 'application/octet-stream' 响应头
response['Content-Disposition'] = 'attachment;filename="%s"' % file.name
return response
## cookie介绍
```python
# Django用HttpResponse对象操作Cookie
response = HttpResponse('所有的响应都是HttpResponse对象')
# 设置cookie:key、vaule与过期时间
response.set_cookie(key, value, max_age)
# 删除cookie:key
response.delete_cookie(key)
# 设置加盐cookie:key、vaule与盐字符串(就是简易的加密)
response.set_signed_cookie(key, value, salt)
# 通过request对象获取Cookie
# 获取key对应的value
request.COOKIES.get(key, None)
# 获取加盐后的key对应的value
request.get_signed_cookie(key, salt)
'''
了解:set_cookie方法的其他参数
1. expires:过期时间,格式为字符串类型的时间
2. path:作用路径,/代表所有路径下均起作用
3. domain:作用域名
4. secure:布尔类型,浏览器是否通过HTTPS方式回传cookie
5. httponly:布尔类型,JS能否直接访问该条cookie
session
```python
'''
# 在视图函数中通过request对象操作session
# 1. 设置session
request.session['key1'] = 'value1'
request.session['key2'] = 'value2'
过程:
# i) 生成一个随机字符串,作为主键
# ii) 在django_session表中插入有三个字段的一条数据(一条数据对应一个浏览器会话)
-- session_key:主键-随机字符串
-- session_data:该会话拥有的所有key-value形成的大字典的加密字符串
-- expire_date:过去时间,默认14天
# iii) 往浏览器中写入一条cookie,sessionid=主键的随机字符串
# 2. 获取session
request.session.get('key', None)
# 3. 删除session
request.session.delete() # 只删除当前会话对应的一条记录
request.session.flush() # 除了删除当前会话对应的一条记录外,还删除对应浏览器中的cookie,建议使用
# 4. 清除django-session表中所有过期的session字段
request.session.clear_expired() # 情况所有过去的Session
# 5. 了解
request.session.session_key # 获取当前会话对应的session_key
request.session.exists('session_key') # 判断某session_key是否存在
## session的settings配置
```python
''' settings.py配置
# 1. 数据库存储
# SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
#
# 2. 缓存存储
# SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
# SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
#
# 3. 文件存储
# SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
# SESSION_FILE_PATH = '/' # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
#
# 4. 缓存 + 数据库存储
# SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
#
# 5. 加密Cookie
# SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
#
# SESSION_COOKIE_NAME = "sessionid" # cookie的key名,值为随机字符串
# SESSION_COOKIE_PATH = "/" # 作用路径,/代表所有路径下均起作用)
# SESSION_COOKIE_DOMAIN = None # 作用域名
# SESSION_COOKIE_SECURE = False # 布尔类型,浏览器是否通过HTTPS方式回传cookie
# SESSION_COOKIE_HTTPONLY = True # 布尔类型,JS能否直接访问该条cookie
# SESSION_COOKIE_AGE = 1209600 # 数据库session字段的过期时间
# SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 浏览器关闭后cookie是否过期,默认False不过期,建议True
# SESSION_SAVE_EVERY_REQUEST = False # 每一次请求,是否更新session字段的过期时间,默认False不更新,建议True
'''
实现登录验证
cookie以明文的形式设置,通过访问判断是否登录,同时用装饰器实现转向登录界面时携带原链接地址
session以密文形式,在数据库有三个值,key,值,和失效时间。每个会话窗只会有一个key不变,但是在浏览器删除session会再次添加
登陆成功 对应的值与不成功对应的值不同,通过判断值来进行判断
def outter(func):
def inner(request,*args,**kwargs):
# if not request.COOKIES.get('is_login',None):
if not request.session.get('is_login', None):
path=request.get_full_path()
return_path='/login/?return=%s'%path
return redirect(return_path)
return func(request,*args,**kwargs)
return inner
def zhuye(request):
return redirect('/index')
@outter
def car(request):
# usr = request.COOKIES.get('usr', None)
usr = request.session.get('usr', None)
return render(request, 'car.html', locals())
def login(request):
if request.method=='GET':
response=render(request,'login.html')
return render(request,'login.html')
if request.method=='POST':
usr=request.POST.get('usr',None)
pwd=request.POST.get('pwd', None)
path=request.GET.get('return','/index')
if usr=='zzf' and pwd=='1996':
response=redirect(path)
request.session['usr']='zzf'
request.session['is_login'] = True
print(request.session.get('usr',None))
# response.set_cookie('usr','zzf')
# response.set_cookie('is_login', True,max_age=5)
return response
request.session['usr'] = None
request.session['is_login'] = False
print(request.session.get('usr', None))
return redirect('/index')
@outter
def space(request):
# usr=request.COOKIES.get('usr',None)
usr = request.session.get('usr', None)
return render(request,'space.html',locals())
def index(request):
return render(request,'index.html')
def loginout(request):
response = redirect('/')
# response.delete_cookie('usr')
# response.delete_cookie('is_login')
request.session.flush()
return response