我如何允许用户使用此模型 post 视频:
How Can I allow user to post a video using this models:
我希望经过身份验证的用户能够 post 在此应用程序中我该怎么做?
我在 django 的 sqlite admin 中测试了它,它工作正常,现在我想允许用户从 addvideo 模板 post:
这是型号:
from django.db import models
from django.db.models.base import Model
from django.db.models.fields import CharField
from django.contrib.auth.models import User
from django.db import models
# Create your models here.
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
file = models.FileField(null=False, blank=False)
title = CharField(max_length=25, blank=False)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
这是我的添加视频模板:
<div class="container">
<div class="row justify-content-center">
<div class="col-md-5">
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="card">
<div class="form-group m-3">
<label>Upload Your Video</label><br><br>
<input required
name="video"
type="file"
accept="video/*"
class="form-control-file">
</div>
<div class="form-group m-3">
<label for="title">Your Topic</label>
<input type="text" class="form-control" name="title" id="title">
</div>
<button type="submit" class="btn btn-primary">Add Post</button>
</div>
</form>
</div>
</div>
</div>
这是我的 views.py 文件:
from django.shortcuts import render, redirect
from django.contrib.auth.models import User, auth
from django.contrib import messages
from .models import Post
def addvideo(request):
posting = Post.objects.all()
if request.method == 'POST':
file = request.FILES.get('video')
posting = Post.objects.create(
file=file
)
return redirect('home')
return render(request, 'addvideo.html', {'posting': posting})
def dashboard(request):
posting = Post.objects.select_related('user')
return render(request, 'dashboard.html', {'posting': posting})
def home(request):
posting = Post.objects.select_related('user')
return render(request, 'home.html', {'posting': posting})
def viewVideo(request, pk):
posting = Post.objects.get(id=pk)
return render(request, 'video.html', {'posting': posting })
对我来说,解决这个问题最简单的方法是使用 CreateView
。
views.py
文件:
from django.views.generic import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Post # Will import Your `Post` model
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['title', 'file']
success_url = '/'
template_name = 'addvideo.html'
def form_valid(self, form):
form.instance.user = self.request.user
return super(PostCreateView, self).form_valid(form)
model
是您的模型名称(在您的例子中是 Post
)。
fields
是您要在模板中显示的字段列表。
template_name
是模板的路径。
success_url
是Post创建成功后用户重定向的路径。
form_valid
会将当前 logged-in 用户保存为 post.
的所有者
addvideo.html
文件:
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit">
</form>
要在您的模板上使用自定义样式,您可以使用 django-widget-tweaks
package, Here is a step-by-step tutorial on how to use this package link。
我希望经过身份验证的用户能够 post 在此应用程序中我该怎么做? 我在 django 的 sqlite admin 中测试了它,它工作正常,现在我想允许用户从 addvideo 模板 post:
这是型号:
from django.db import models
from django.db.models.base import Model
from django.db.models.fields import CharField
from django.contrib.auth.models import User
from django.db import models
# Create your models here.
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
file = models.FileField(null=False, blank=False)
title = CharField(max_length=25, blank=False)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
这是我的添加视频模板:
<div class="container">
<div class="row justify-content-center">
<div class="col-md-5">
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="card">
<div class="form-group m-3">
<label>Upload Your Video</label><br><br>
<input required
name="video"
type="file"
accept="video/*"
class="form-control-file">
</div>
<div class="form-group m-3">
<label for="title">Your Topic</label>
<input type="text" class="form-control" name="title" id="title">
</div>
<button type="submit" class="btn btn-primary">Add Post</button>
</div>
</form>
</div>
</div>
</div>
这是我的 views.py 文件:
from django.shortcuts import render, redirect
from django.contrib.auth.models import User, auth
from django.contrib import messages
from .models import Post
def addvideo(request):
posting = Post.objects.all()
if request.method == 'POST':
file = request.FILES.get('video')
posting = Post.objects.create(
file=file
)
return redirect('home')
return render(request, 'addvideo.html', {'posting': posting})
def dashboard(request):
posting = Post.objects.select_related('user')
return render(request, 'dashboard.html', {'posting': posting})
def home(request):
posting = Post.objects.select_related('user')
return render(request, 'home.html', {'posting': posting})
def viewVideo(request, pk):
posting = Post.objects.get(id=pk)
return render(request, 'video.html', {'posting': posting })
对我来说,解决这个问题最简单的方法是使用 CreateView
。
views.py
文件:
from django.views.generic import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Post # Will import Your `Post` model
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['title', 'file']
success_url = '/'
template_name = 'addvideo.html'
def form_valid(self, form):
form.instance.user = self.request.user
return super(PostCreateView, self).form_valid(form)
model
是您的模型名称(在您的例子中是 Post
)。
fields
是您要在模板中显示的字段列表。
template_name
是模板的路径。
success_url
是Post创建成功后用户重定向的路径。
form_valid
会将当前 logged-in 用户保存为 post.
addvideo.html
文件:
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit">
</form>
要在您的模板上使用自定义样式,您可以使用 django-widget-tweaks
package, Here is a step-by-step tutorial on how to use this package link。