如何将外部 python 代码实现到 Django Web 服务器?
How to implement an external python code to a Django web server?
如标题所述,我正在尝试将外部 python 代码实施到 Django 网络服务器。
我对编程很陌生,所以任何提示肯定会有帮助。
长话短说:我正在尝试建立一个用户必须插入氨基酸序列的表格。这个序列应该传递给我的 python 脚本,它能够将它与数据库中已经存在的所有序列进行比较,并给出最相似的结果。我的问题是我无法让我的表单和我的脚本相互交谈。
我在这里遵循了 Django 文档 https://docs.djangoproject.com/en/3.2/topics/forms/ 但这并没有太大帮助。
也在网上漫游,浏览这里已经问过的问题是没有结果的。
请在下面的文件中找到:
BLAST_page.html(都试过了,评论和未评论)
{% extends "base_generic.html" %}
{% block content %}
<div class="container-fluid" style="text-align: center;" ></div>
<form method="post" action= {% url 'BLAST-process' %}>
{% csrf_token %}
{{ blast }}
<label for="sequence">Type or paste your sequence in the box below</label><br><br>
<input type="text" id="sequence" class="input_text" name="sequence" value="{{ sequence }}" style="width:600px; height:200px;"><br><br>
<input type="submit" value="Submit">
</form>
</div>
{% endblock %}
<!--
<div class="container-fluid" style="text-align: center;" >
<form method="POST" action= {% url 'BLAST-process' %}>
{% csrf_token %}
<label for="sequence">Type or paste your sequence in the box below</label><br><br>
<input type="text" id="sequence" class="input_text" name="sequence" value="{{ sequence }}" style="width:600px; height:200px;"><br><br>
<input type="submit" value="Submit">
</form>
</div>
-->
为了检查此表单是否有效,我使用了这个简单的 .php 脚本。背后的原因是如果表单工作正常,插入的数据应该被回显。但这并没有发生。
<html>
<body>
Sequence: <?php echo $_POST["sequence"]; ?><br>
<?php
echo "<h2>Your Input:</h2>";
echo $sequence;
?>
</body>
</html>
forms.py
from django import forms
class blast(forms.Form):
sequence = forms.CharField(help_text="Enter a sequence", label='sequence')
blast.py 应该从表单接收数据的脚本
from Bio.Blast.Applications import NcbiblastpCommandline
from io import StringIO
from Bio.Blast import NCBIXML
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio import SeqIO
import numpy as np
# Create two sequence files
#taken from the textArea.
sequence = sequence
seq1 = SeqRecord(Seq(sequence), id="x")
SeqIO.write(seq1, "seq1.fasta", "fasta")
#SeqIO.write(seq2, "seq2.fasta", "fasta")
# Run BLAST and parse the output as XML
output = NcbiblastpCommandline(query="seq1.fasta",
subject="/Users/santarpia/Documents/tutorial/codorenv/RepOdor/FASTA/db.fasta",
outfmt=5)()[0]
blast_result_record = NCBIXML.read(StringIO(output))
# Print some information on the result
for alignment in blast_result_record.alignments:
for hsp in alignment.hsps:
print('***Alignment****\n')
print('Alignment title', alignment.title)
print('Alignment Length:', alignment.length)
print('E-value:', hsp.expect)
print('Gaps:', hsp.gaps)
print('Identities:', hsp.identities)
print('Positives:', hsp.positives)
print('Score:', hsp.score)
print('Bits:', hsp.bits)
print('Coverage:', hsp.align_length)
print('% Identity:', np.round((hsp.identities / hsp.align_length) * 100, 2))
print("\n")
print (hsp.query[0:])
print("\n")
print (hsp.match[0:])
print("\n")
print (hsp.sbjct[0:])
print('****************************\n\n\n')
如前所述,如有任何关于如何设置的评论,我们将不胜感激。如果您需要更多文件或信息来回答我的问题,请随时索取。
因此,如果您在将序列提交到表单后正确地遵循了文档,则代码应该“输入”视图的 if request.method == 'POST'
部分。您可以通过在 if(或 import pdb; pdb.set_trace()
)下放置一个 print("hello world")
语句来验证这一点。在那里,您可以使用 sequence = form.cleaned_data['sequence']
从表单中获取序列。现在要将它传递给你的脚本,你需要你的脚本是一个可以接受输入(序列)的方法,所以将你的脚本包装在 def findMostSimilarSequence(sequence):
之类的东西中并删除第一行 sequence = sequence
然后在你的查看您可以导入方法并使用表单中的序列变量调用它。
如标题所述,我正在尝试将外部 python 代码实施到 Django 网络服务器。
我对编程很陌生,所以任何提示肯定会有帮助。
长话短说:我正在尝试建立一个用户必须插入氨基酸序列的表格。这个序列应该传递给我的 python 脚本,它能够将它与数据库中已经存在的所有序列进行比较,并给出最相似的结果。我的问题是我无法让我的表单和我的脚本相互交谈。
我在这里遵循了 Django 文档 https://docs.djangoproject.com/en/3.2/topics/forms/ 但这并没有太大帮助。
也在网上漫游,浏览这里已经问过的问题是没有结果的。
请在下面的文件中找到:
BLAST_page.html(都试过了,评论和未评论)
{% extends "base_generic.html" %}
{% block content %}
<div class="container-fluid" style="text-align: center;" ></div>
<form method="post" action= {% url 'BLAST-process' %}>
{% csrf_token %}
{{ blast }}
<label for="sequence">Type or paste your sequence in the box below</label><br><br>
<input type="text" id="sequence" class="input_text" name="sequence" value="{{ sequence }}" style="width:600px; height:200px;"><br><br>
<input type="submit" value="Submit">
</form>
</div>
{% endblock %}
<!--
<div class="container-fluid" style="text-align: center;" >
<form method="POST" action= {% url 'BLAST-process' %}>
{% csrf_token %}
<label for="sequence">Type or paste your sequence in the box below</label><br><br>
<input type="text" id="sequence" class="input_text" name="sequence" value="{{ sequence }}" style="width:600px; height:200px;"><br><br>
<input type="submit" value="Submit">
</form>
</div>
-->
为了检查此表单是否有效,我使用了这个简单的 .php 脚本。背后的原因是如果表单工作正常,插入的数据应该被回显。但这并没有发生。
<html>
<body>
Sequence: <?php echo $_POST["sequence"]; ?><br>
<?php
echo "<h2>Your Input:</h2>";
echo $sequence;
?>
</body>
</html>
forms.py
from django import forms
class blast(forms.Form):
sequence = forms.CharField(help_text="Enter a sequence", label='sequence')
blast.py 应该从表单接收数据的脚本
from Bio.Blast.Applications import NcbiblastpCommandline
from io import StringIO
from Bio.Blast import NCBIXML
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio import SeqIO
import numpy as np
# Create two sequence files
#taken from the textArea.
sequence = sequence
seq1 = SeqRecord(Seq(sequence), id="x")
SeqIO.write(seq1, "seq1.fasta", "fasta")
#SeqIO.write(seq2, "seq2.fasta", "fasta")
# Run BLAST and parse the output as XML
output = NcbiblastpCommandline(query="seq1.fasta",
subject="/Users/santarpia/Documents/tutorial/codorenv/RepOdor/FASTA/db.fasta",
outfmt=5)()[0]
blast_result_record = NCBIXML.read(StringIO(output))
# Print some information on the result
for alignment in blast_result_record.alignments:
for hsp in alignment.hsps:
print('***Alignment****\n')
print('Alignment title', alignment.title)
print('Alignment Length:', alignment.length)
print('E-value:', hsp.expect)
print('Gaps:', hsp.gaps)
print('Identities:', hsp.identities)
print('Positives:', hsp.positives)
print('Score:', hsp.score)
print('Bits:', hsp.bits)
print('Coverage:', hsp.align_length)
print('% Identity:', np.round((hsp.identities / hsp.align_length) * 100, 2))
print("\n")
print (hsp.query[0:])
print("\n")
print (hsp.match[0:])
print("\n")
print (hsp.sbjct[0:])
print('****************************\n\n\n')
如前所述,如有任何关于如何设置的评论,我们将不胜感激。如果您需要更多文件或信息来回答我的问题,请随时索取。
因此,如果您在将序列提交到表单后正确地遵循了文档,则代码应该“输入”视图的 if request.method == 'POST'
部分。您可以通过在 if(或 import pdb; pdb.set_trace()
)下放置一个 print("hello world")
语句来验证这一点。在那里,您可以使用 sequence = form.cleaned_data['sequence']
从表单中获取序列。现在要将它传递给你的脚本,你需要你的脚本是一个可以接受输入(序列)的方法,所以将你的脚本包装在 def findMostSimilarSequence(sequence):
之类的东西中并删除第一行 sequence = sequence
然后在你的查看您可以导入方法并使用表单中的序列变量调用它。