我正在创建一种仪表板,当它完成时,将允许用户(1(上传个人资料图片,(2(为自己输入显示名称,以及(3(编辑和更改他们的个人资料图片以及他们想要的显示名称。
https://github.com/pmahalan/Avybe_Database_Project
我构建了前端(模板和视图(,并构建了模型。我将该模型标记为";创建者";,与内容创建者一样,与之相关联的两个对象是";name";(对应于它们的显示名称(和";上传";(与他们的照片相对应(。
我也有与提交和上传按钮相关联的URL路径,当点击时会起作用
但是,在输入新用户名或上传新图片后单击"提交"实际上并不会对此人的信息做出更改。如果我亲自通过Django Admin修改信息,我可以更改,但仅此而已;提交";按钮
我是否在views.py文件中创建Django?我是创建两个单独的表单(一个用于显示名称,一个用于配置文件图片(,还是只创建一个?从那里,我如何将它传递到我的模板?是否需要一个";如果";语句查看它是POST请求还是GET请求?
我的观点.py:
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from .models import *
def home(request):
creators = Creator.objects.all()
return render(request, 'accounts/dashboard.html', {'creators': creators})
def changeName(request):
context = {}
return render(request, 'accounts/dashboard.html', context)
def uploadPic(request):
context = {}
return render(request, 'accounts/dashboard.html', context)
我的网址.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home),
path('update_name/', views.changeName, name="update_name"),
path('upload_pic/', views.uploadPic, name="upload_pic"),
]
我的模板(dashboard.html(:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<meta charset="utf-8">
<title>Avybe Creator Dashboard</title>
</head>
<body>
<p class="row" style="padding-left: 60px;"> </p>
<!-- Deliberatley empty space -->
<h1 class="row" style="padding-left: 60px;">Welcome to your Avybe Creator Dashboard!</h1>
<p class="row" style="padding-left: 60px;"> </p>
<!-- Deliberatley empty space -->
<form action="" method="POST" class="row" style="padding-left: 60px;" enctype="multipart/form-data">
{% csrf_token %}
Upload a Profile Picture:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit" href="{% url 'upload_pic' %}">
</form>
<p class="row"> </p>
<!-- Deliberatley empty space -->
<p class="row" style="padding-left: 60px;">Your current displayname is:
{% for i in creators %}
{{i.name}}
{% endfor %}
</p>
<p class="row" style="padding-left: 60px;"> </p>
<!-- Deliberatley empty space -->
<form action="" method="POST" class="row" style="padding-left: 60px;">
{% csrf_token %}
<label for="publicname">Edit your displayname: </label>
<input type="text" id="publicname" name="publicname" value="ExampleName">
<input type="submit" value="Submit" href="{% url 'update_name' %}">
</form>
</body>
</html>
我的型号:
from django.db import models
# Create your models here.
class Creator(models.Model):
name = models.CharField(max_length=200, null=True)
upload = models.ImageField(blank=True, null=True)
诚然,我也是Django的新手,但Django没有自己用输入字段制作表单,而是有自己的方法来制作表单,我会推荐。为了使用Django制作表单,您必须创建一个新的类,例如:
class edit_name(forms.Form):
new_name = forms.CharField(label="Enter Your New Name")
然后,在你的views.home函数中(或者在你想要表单的任何地方(,你可以添加一行生成一个空白表单,比如:
form=edit_name()
然后在您的上下文中,添加'form': form
这样,在HTML文件中,不必编写所有输入,只需执行{{ form }}
,Django就会自动为您生成表单。现在,为了接收此表单提供的数据,您可以将此代码添加到处理POST请求的视图函数中,在您的情况下,它是update_name(仅关注一个表单(。
if request.method == 'POST':
form = edit_name(request.POST)
if form.is_valid():
title = form.cleaned_data['new_name']
现在,您有了带有输入数据的title变量,您现在可以对它执行任何您想要的操作,比如编辑一些文件,然后返回httpredirect、render或响应。
希望这能有所帮助!附言:如果我的代码中有任何错误,我很抱歉,正如我所说,我自己也有点像Django noob。此外,很抱歉,如果我错过了一步,为了更彻底地了解表单和Django,我推荐这节课。