【问题标题】:django project multiple user use the same projectdjango project 多个用户使用同一个项目
【发布时间】:2018-01-29 20:20:07
【问题描述】:

我是 django 和网络编程的新手。现在,我已经创建了一个用于配置表单生成的 django 项目。它允许用户输入值并在用户获得 URL 后生成配置表单。

Project name: portal, App name: home, input_data.txt: a text file stored the values for the corresponding parameter and it will be read for further processing

它对我自己很好,但多个用户同时使用它。它不起作用。我该怎么做才能让多个用户同时使用它?

forms.py

from django import forms
from .models import FormGen
from .models import BB_Data

class FinalForm(forms.ModelForm):
    class Meta:
        model=FormGen
        field=['full_name','backbone_number']
class BBForm(forms.ModelForm):
    class Meta:
        model=BB_Data
        fields=['backbone_name','IP','numbers']
        widget={'numbers':forms.TextInput(attrs={'readonly':'readonly'})}

views.py

from django.shortcuts import render,HttpResponse,redirect
from .forms import FinalForm,BBForm
from django.core.files import File
import re

def replacePara(template,para):
    for key,val in para.items():
        template=template.replace(key,val)
    return template

def create(request):
    title="Router Generator"
    form=FinalForm(request.POST or None)
    context={
        "template_title":title,
        "form":form,
    }
    if(form.is_valid()):
    form_data={
        "HNAME":form.cleaned_data.get("Hostname"),
        "ROLE":form.cleaned_data.get("Router_Role"),
    }
    form.save()
    f=open('./input_para.txt','r')
    a=f.read();
    f.close();
    tt=replacePara(a,form_data)
    b=open('./input_data.txt','w')
    b.write(tt)
    b.close()
    return redirect('/backbone')

return render(request,"home/form.html",context)

def bb(request):
    title="Backbone Information"
    if request.method=="POST":
        form=BBForm(request.POST)
        if form.is_valid():
            bb_form={
                'BBNAME':form.cleaned_data.get('backbone_name'),
                'BBIP':form.cleaned_data.get('IP'),
            }
        a=int(form.cleaned_data.get('numbers')
        datainput=''
        if a==1:
            f=open('./bb_set.txt','w')
            f.write(bb_form)
            f.close()
        else: 
            f=open('./bb_set.txt','a')
            outBB.write(bb_form)
            outBB.close()
        form.save()
        f=open('./input_data.txt','r')
        t=f.read()
        tt=int(t.split()[7])  #it get the max number of backbones
        if(at<tt):
            at=at+1;
            bb=BBForm(initial={'numbers':str(at)})
            context={
                "template_title":title,
                "form":bb
            }
            return render(request,"home/bb.html",context)
        else:
            # generate the configurate text file #
            content=final # content store the configurations
            filename="ConfigForm.txt"
            response=HttpResponse(content,content_type='text/plain')
            response['Content-Disposition']='attachment; filename={0}'.format(filename)
            return response
    else:
        return HttpResponse("something wrong")
else:
    form=BBForm(initial={'numbers':"1"})
    f=open('./input_data.txt','r')
    t=f.read()
    tt=int(t.split()[7])
    context={
        'template_title':title,
        'form':form,
        'max':tt
    }
    return render(request,"home/bb.html",context)

input_para:它是存储参数名称的文本文件 input_data:它是存储相应参数值的文本文件 bb_set:它是存储所有主干信息的文本文件

【问题讨论】:

  • “它不起作用”是什么意思?你能和我们分享一些代码,错误是给你的吗?
  • @alessioferri20 “它不起作用”意味着来自 2 个用户的数据输入被中断。没有任何错误信息。生成的表格用于路由器配置。因此,用户需要指定主干的数量。但是,当 User1 需要 1 个骨干,而 User2 需要配置 2 个骨干时,User2 只能配置 1 个骨干。我认为来自 user1 的数据会中断来自 user2 的数据
  • 我需要使用 session 还是 cookie 来解决这个问题?如果是,我该如何使用它
  • @Samon Ngai 如果没有代码可以帮助你

标签: python django


【解决方案1】:

您将数据保存到单个文件中,而不考虑用户。如果我访问您的网站,我会写信给同样的 input_data.txtinput_para.txtbb_set.txt 文件,就像其他人访问的一样。

不是为网站/服务保留用户数据的方式。您应该使用数据库。

幸运的是,您使用的是 Django,它具有出色的数据库集成,而且实际上非常简单。对您来说,最困难的部分将是设计数据库。你需要一个User 模型,据我所知,你可以根据它记录input_datainput_parabb_set 数据。

我建议您遵循 Django 教程,特别是 this 部分,也许还阅读一下数据库设计(包括数据的规范化,这比听起来更有趣)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多