首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重构我的Django代码?

如何重构我的Django代码?
EN

Stack Overflow用户
提问于 2018-06-20 14:25:12
回答 1查看 90关注 0票数 0

我是新来的Django.I,我想创建一个应用程序,可以让选定的用户登录,然后上传文件,后者将被处理。

models.py

代码语言:javascript
复制
class Profile(models.Model):
    username = models.OneToOneField(User, on_delete=models.CASCADE)
    password = models.TextField(max_length=80,blank=True)
    company = models.TextField(max_length=80, blank=True)

    @receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)


    @receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.profile.save()

class Document(models.Model):
    uploaded_by = models.ForeignKey(Profile,on_delete=models.CASCADE)
    date_uploaded = models.DateTimeField(auto_now_add=True)

forms.py

代码语言:javascript
复制
class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)
    company = forms.CharField()

class DocumentForm(forms.Form):
    docfile = forms.FileField(label='Select a file')

Malex.urls(应用程序urls)

代码语言:javascript
复制
from malex.views import list
from malex.views import login 

urlpatterns = [
    url(r'^list/$', list, name='list'),
    url(r'^login/$', login, name='login'),
]

项目/网址

代码语言:javascript
复制
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^newp/', include('malex.urls')),
]

views.py

代码语言:javascript
复制
def login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            user = authenticate(user=cd['user'],password=cd['password'],company=cd['company'])
            if user is not None:
                if user is active:
                    login(request,user)
                    return HttpResponse('Authenticated successfully')
                else:
                    return HttpResponse('Disabled account')
            else:
                return HttpResponse('Invalid login')
    else:
        form=LoginForm()

    return render(request,'account/login.html',{'form': form})



def list(request):
    # Handle file upload
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Document(docfile=request.FILES['docfile'])
            newdoc.save()

            # Redirect to the document list after POST
            return HttpResponseRedirect(reverse('list'))

现在,登录和上传操作是分开的。如何将我的视图和urls更改为先登录后上传?我是否需要在装饰器中使用基于类的视图?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 14:40:53

  1. 创建自定义登录表单和视图。
  2. 使用本地主机:8000地址作为登录模板 (app) urlpatterns = [path('',views.loginview,name = 'login')] (project) urlpatterns = [path('', include('malex.urls')),)]
  3. 使用{% block content %}{% endblock %}扩展登录模板
  4. 在模板或视图中使用pass限制{% if request.user.is_authenticated %},让它们访问upload section
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50950557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档