django get與post參數,文件上傳


get與post參數

get與post傳參可以通過前端頁面method控制,當method為get時就是通過get傳參,當method為post的時就是通過post form表單傳遞參數

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <h1>登錄</h1>
 9 <form action="" method="post">
10     {% csrf_token %}
11     <p>用戶名:<input type="text" name="username"></p>
12     <p>密碼:<input type="password" name="password"></p>
13     <p><input type="submit" value="登錄"></p>
14 </form>
15 </body>
16 </html>

get傳參效果

 

post傳參效果,主要時通過form表單傳遞

 

 

前后台數據交互及登陸小案例

前端登陸頁面login.html

 1 <body>
 2 <h1>登錄</h1>
 3 <form action="" method="post">
 4     {% csrf_token %}
 5     <p>用戶名:<input type="text" name="username"></p>
 6     <p>密碼:<input type="password" name="password"></p>
 7     <p><input type="submit" value="登錄"></p>
 8 </form>
 9 </body>
10 </html>

后端views頁面,需要判斷method然后根據提交的參數判斷是否跳轉到index頁面

1 def login(request):
2     # url = reverse('teacher:detail', kwargs={'pk': 12})
3     # return redirect(url) # 硬編碼
4     if request.method == "POST":
5         username = request.POST.get('username','')
6         password = request.POST.get('password','')
7         if username =='xinlan' and password =='123456':
8             return redirect(reverse('teacher:index'))
9     return render(request, 'teacher/login.html')

  出現一鍵多值的情況的時候,需要用request.GET.getlist()

 

文件上傳:

    1.設置上傳路徑:

    setting里面設置UPLOAD__ROOT

  

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')

  2.上傳前端頁面upload.html

  

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <h1>上傳文件</h1>
 9 <form action=""method="post" enctype="multipart/form-data">
10     <p>請選擇你要上傳的文件: <input type="file" name="file"></p>
11     <p><input type="submit" value="上傳"></p>
12 </form>
13 
14 </body>
15 </html>

3.后端設置

  需要設置views.py和urls路由等

  views

  

def upload(request ):
if request.method == 'POST':
file = request.FILES.get('file',None)
if file:
day_dir = datetime.now().strftime('%Y%m%d')
pre_dir = os.path.join(UPLOAD_ROOT,day_dir)
if not os.path.exists(pre_dir):
os.mkdir(pre_dir)
filename=os.path.join(pre_dir,file.name)
with open(filename,'wb') as f:
for line in file.chunks():
f.write(line)
return HttpResponse('上傳成功')
else:
return render(request,'teacher/upload.html')

urls

urlpatterns = [
    path('index/', views.index, name='index'),
    path('login/', views.login),
    path('detail/<int:pk>/', views.detail, name='detail'),
    # path('students/<int:year>/<int:month>/', views.students),
    re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students),
    path('upload/', views.upload,name='upload'),
]

多文件上傳:

  前端upload頁面需要加multiple

1 <h1>上傳文件</h1>
2 <form action=""method="post" enctype="multipart/form-data">
3     <p>請選擇你要上傳的文件: <input type="file" name="file" multiple></p>
4     <p><input type="submit" value="上傳"></p>
5     {% csrf_token %}
6 </form>

后端views需要通過getlist來獲取多個文件,然后通過for循環分別上傳

 1 def upload(request):
 2     if request.method == 'POST':
 3         files = request.FILES.getlist('file', None)
 4         for file in files:
 5             day_dir = datetime.now().strftime('%Y%m%d')
 6             pre_dir = os.path.join(UPLOAD_ROOT, day_dir)
 7             if not os.path.exists(pre_dir):
 8                 os.mkdir(pre_dir)
 9             filename = os.path.join(pre_dir, file.name)
10             with open(filename, 'wb') as f:
11                 for line in file.chunks():
12                     f.write(line)
13         return HttpResponse('上傳成功!')
14 
15     return render(request, 'teacher/upload.html')

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM