Django学习小结(Windows平台)
目录
1.安装Django与启动Django项目
1)安装Django:pip install Django
2)启动Django项目
1.cmd去到python安装路径或虚拟环境的Script文件夹中
2.执行django-admin.py startproject proj_name
3.执行python manage.py runserver 0.0.0.0:8080
4.浏览器输入localhost:8080见到如下画面,即表示安装成功
2.Django项目的项目结构
1.与项目同的app(mysite)主要存放请求路径分发的功能
2.其他文件夹(calc,learn)作为一个独立的app模块,与整个项目协同合作
3.Django网站中,传递参数与接收参数
1)通过request.GET[]
1.django_project_name/app_name/views.py(app_name项目其他app,创建项目app:cmd进入到django根目录,python startapp app_name创建)
from django.http import HttpResponse
#只需要一个request的参数
def get_parm(request):
parm1 = request.GET['parm_name1']
parm2 = request.GET['parm_name2']
return HttpResponse('从网页上获取的参数是:{0},{1}'.format(parm1, parm2))
2.django_project_name/django_project_name/urls.py(与项目同名的文件夹下)
from calc import get_parm
urlpatterns = [
#对应上面的get_param()方法
path('app_name/get_parm', get_parm),
]
3.url地址
2)通过<data_type:parm_name>这种方式获取
1.djangoProjectName/appName/views.py(appName项目其他app,创建项目app:cmd进入到django根目录,python startapp app_name创建)
from django.http import HttpResponse
def get_parm2(request, parm1, parm2):
return HttpResponse('从网页上获取的参数是:{0},{1}'.format(parm1, parm2))
2.django_project_name/django_project_name/urls.py(与项目同名的文件夹下)
urlpatterns = [
#对应上面的get_parm2()方法
path('app_name/get_parm2/<str:parm1>/<str:parm2>', get_parm2),
]
3.url地址
4.文件上传,下载
1)上传
a.web页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Office Index</title>
</head>
<body>
<h1>Index</h1>
<ol>
<li>
<form action="file_upload" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</li>
</ol>
</body>
</html>
b.views.py中的方法:
from django.http import HttpResponse
from django.shortcuts import render
from office.utils.file_utils import *
def file_upload(request):
"""
html页面实现文件上传到服务器,可以是服务器中的绝对路径
"""
# get(file')是指<input>中name的值
file = request.FILES.get('file')
upload_flag = file_upload(file, file.name, 'D:\\FileUploadLocation\\')
# 上传结果页面,可以下载刚刚上传的文件
rst_page = 'rst.html'
if upload_flag:
# 文件处理(忽略)
dict_data = {
'info': '文件上传成功!',
'file_name': file_name
}
return render(request, rst_page, dict_data)
else:
dict_data = {
'info': '文件上传失败!',
}
return render(request, rst_page, dict_data)
c.file_utils中的方法
def file_upload(file, file_name, file_loc):
"""
文件上传到指定路径
"""
try:
with open(file_loc + file_name, 'wb+') as destination:
for chunk in file.chunks():
destination.write(chunk)
return True
except IOError as e:
print(e)
return False
2)下载
a.web(rst.html)页面:
<!DOCTYPE html>
<html>
<head>
<title>上传结果</title>
</head>
<body>
<h1>上传结果:{{ info }}</h1>
<p>
<a href="file_download?file_path={{ file_name }}">
文件下载:{{ file_name }}</a>
</p>
</body>
</html>
b.views.py中的方法
from django.http import FileResponse
def file_download(request):
"""
下载def file_upload(request)方法中上传的文件
"""
#def file_upload(request)上传文件的绝对路径
file_loc = 'D:\\FileUploadLocation\\'
#获取文件域数据
upload_file_name = request.GET['file_path']
# 下载文件的文件名处理,可以根据自己的情况修改
page_file_name = str(upload_file_name).split('_')[2]
file_loc += str(upload_file_name)
file = open(file_loc, 'rb')
response = FileResponse(file)
response['Content-Type'] = 'application/octet-stream'
# 防止中文文件名不显示
response['Content-Disposition'] =
'attachment;filename="{0}"'.format(escape_uri_path(page_file_name))
return response
3)urls.py中的内容
from django.urls import path
from .views import file_upload, file_download
urlpatterns = [
path('file_upload', file_upload),
path('file_download', file_download),
]