前台提交数据到数据库
这个我也是想学了很久啊,如果不会这种操作那么后面很多东西都没办法去做,虽然说我看的视频水平不高,但是自己也比较菜,准确来说是菜的一批,所以说还是得好好学习啊,太难了。wdnmd刚刚上午写个开头想下午写的,结果下午pycharm的源直接炸了,搞的我人都吐了,弄了半天,搞成阿里源才搞好。
首先我们需要去页面里添加一个新的页面用来提交数据
<h2 align="center">发布新的APP</h2>
<form action="{% url '发布页面' %}" method="post" align="center" enctype="multipart/form-data">
{% csrf_token %}
APP名称:<br><input class="hanpi" type="text" name="APP名称"><br><br>
介绍:<br><textarea name="介绍" cols="100" rows="10"></textarea><br>
APP链接: <br><input type="text" name="APP链接"><br><br>
APP图标(缩略图):<input type="file" name="APP图标"><br><br>
大图:<input type="file" name="大图"><br>{{ 错误 }}<br>
<input class="hanpi btn btn-primary" type="submit" value="发布">
</form>
这里面的数据我们前面基本上都看到了,就如同我们之前的注册和登录页面一样,这是我们提交了一个post请求到‘发布页面’,然后到urls里面注册一下
path('publsh/', views.publsh, name= '发布页面'),
现在我们得到了这么多的数据,那我们需要去models.py里面新建一下我们的数据库表,用来存放数据
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Product(models.Model):
app_name = models.CharField(max_length=50, verbose_name='APP名称')
intro = models.TextField(verbose_name='介绍')
url = models.CharField(default='Https://', verbose_name='链接', max_length=100)
icon = models.ImageField(verbose_name='图标', upload_to='images/')
image = models.ImageField(verbose_name='图片', upload_to='images/')
votes = models.IntegerField(default=1, verbose_name='投票数量')
pub_data = models.DateTimeField()
hunter = models.ForeignKey(User, on_delete=models.CASCADE)
//这个就是将登录的人连接到数据库中,用来显示自己发布的东西
def __str__(self):
return self.app_name
这里我是有一个新的app来存放数据,这个其实也是前面的内容,然后我们去创建一下这个表(具体前面有讲),然后就可以开始写我们的views.py文件了,在这里我们需要创建一个publsh(与urls里面的名字一样)函数来处理接收到的数据
from django.shortcuts import render,redirect
from django.contrib.auth.decorators import login_required
from .models import Product
from django.utils import timezone
@login_required //登录的验证
def publsh(request):
if request.method == 'GET':
return render(request, 'publsh.html')
elif request.method == 'POST':
app_name = request.POST['APP名称']
intro = request.POST['介绍']
url = request.POST['APP链接']
try:
icon = request.FILES['APP图标']
image = request.FILES['大图']
product = Product()
product.app_name = app_name
product.intro = intro
product.url = url
product.icon = icon
product.image = image
product.pub_data = timezone.datetime.now()
product.hunter = request.user
product.save()
return redirect('主页面')
except Exception as err:
return render(request, 'publsh.html', {'错误':'请上传图片'})
只要使用一个变量去获取到之前Product,然后去等于就行了,最后使用save函数来存储我们所得到的数据就行了(就这就这?)当然这里设定了一个是否上传图片的try,为了保证不出错所使用的。
这个写完我觉得我目前的学习可以到新的阶段了,可能会休息一段时间,为了让自己有更好的心情和心态去学习。