This commit is contained in:
XXAY
2021-09-24 18:15:01 +08:00
parent 8908b88284
commit 5e7fb8f896
10 changed files with 596 additions and 166 deletions

View File

@@ -3,6 +3,8 @@ import random
import time
import pandas as pd
from Bio import SeqIO
from Bio.SeqUtils import GC
from Simple_Drawing.settings import BASE_DIR
@@ -338,7 +340,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
for d in self.Basics[title]:
parameter = ChartParameter(d)
if parameter.input_type in ["rgb","hex",'color_name']:
if parameter.input_type in ["rgb", "hex", 'color_name']:
code += f"""{parameter.name}:{parameter.name},
"""
else:
@@ -349,7 +351,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
for d in self.Senior[title]:
parameter = ChartParameter(d)
print(parameter.input_type)
if parameter.input_type in ["rgb", "hex",'color_name']:
if parameter.input_type in ["rgb", "hex", 'color_name']:
code += f"""{parameter.name}:{parameter.name},
"""
else:
@@ -381,7 +383,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
}
});
})
""" % (i, random_color(), fl,i)
""" % (i, random_color(), fl, i)
return code
@@ -404,4 +406,68 @@ Treemap = {
}
class Basics(object):
def __init__(self, file_path, args):
self.args = args
self.file_path = file_path
self.out_file = []
self.f = SeqIO.parse(file_path, "fasta") # 读取多条序列
def Sequence_cleaning(self):
f = self.f
temp = []
for i in f:
temp.append(f">{i.id}\n{str(i.seq)}")
self.out_file.append(["Sequence_cleaning", temp])
def Sequence_length(self):
f = self.f
temp = []
for i in f:
temp.append(f"{i.id}\t{len(i)}")
self.out_file.append(["Sequence_length", temp])
def GC_content(self):
f = self.f
temp = []
for i in f:
CONTENT = GC(str(i.seq))
temp.append(f"{i.id}\t{CONTENT}")
self.out_file.append(["GC_content", temp])
def Sequence_flip(self):
f = self.f
temp = []
for i in f:
temp.append(f">{i.id}\n{str(i.reverse_complement().seq)}")
self.out_file.append(["Sequence_flip", temp])
def Reverse_complementarity(self):
f = self.f
temp = []
for i in f:
temp.append(f">{i.id}\n{str(i.complement().seq)}")
self.out_file.append(["Reverse_complementarity", temp])
# def Codon_preference(self):
# f = self.f
# temp = []
# for i in f:
# temp.append(f">{i.id}\n{str(i.complement().seq)}")
# self.out_file.append({"Reverse_complementarity": temp})
def run(self):
for i in self.args.keys():
if self.args[i] == "YES":
eval(f"self.{self.args[i]}")()
data = ""
for i in self.out_file:
for j in i:
data += f"\n{'-' * 15}\n{j[0]}\n"
data += "\n".join(i[1])
with open(self.file_path, "w") as f:
f.write(data)
return data

View File

@@ -7,7 +7,5 @@ urlpatterns = [
path('down', views.download),
url("(.*\.html$)", views.out_page),
url('up_file', views.up_file),
url('tools$', views.tools),
url('tools$', views.tools),
url('(.*)_run', views.chart_run),
]

View File

@@ -122,19 +122,3 @@ def chart_run(request, get_chart_sort):
return JsonResponse({"img": f"/static/img_eg/show_chart/{file_id}_{k}.png"})
def tools(request):
file = request.FILES.get("file", None) # 标题
mg = request.POST.get('mg', None)
data = ""
if file is None and mg is None:
return JsonResponse({"http": "内容为空"})
if file is None:
data = 反向互补序列(mg)
else:
p = file.read()
p.decode(encoding='utf-8')
data = 反向互补序列(p.decode(encoding='utf-8'))
file_path, file_id = path_out("tools")
keep_file(data, file_path, ui=1)
return JsonResponse({"work_id": file_id})

View File

@@ -123,6 +123,7 @@
var form = layui.form;
var url_up = "{{ url }}"
var upload = layui.upload
var element = layui.element
// 页面跳转加载函数
@@ -164,6 +165,7 @@
temp = $('#main_show')
temp.empty()
temp.append(String.raw`{% include 'tools/Basics.html' %}`)
basics_run()
form.render();
}
@@ -172,6 +174,7 @@
temp = $('#main_show')
temp.empty()
temp.append(String.raw`{% include 'tools/pfam.html' %}`)
pfam_run()
form.render();
@@ -183,6 +186,7 @@
temp = $('#main_show')
temp.empty()
temp.append(String.raw`{% include 'tools/Differential_expression_analysis.html' %}`)
Differential_expression_analysis_run()
form.render();
}
@@ -338,6 +342,124 @@
;
})
}
function pfam_run() {
layui.use(['upload'], function () {
var $ = layui.jquery
, layer = layui.layer;
upload.render({
elem: '#select_pfam'
, url: url_up + '/tools/' + "pfam"
, auto: false
, accept: 'file'
, data: {
csrfmiddlewaretoken: '{{ csrf_token }}',
b_dom: document.getElementById("b_dom").value,
b_seq: document.getElementById("b_seq").value,
e_dom: document.getElementById("e_dom").value,
e_seq: document.getElementById("e_seq").value,
align: document.getElementById("align").value,
clan_overlap: document.getElementById("clan_overlap").value,
}
, before: function (obj) { //obj参数包含的信息跟 choose回调完全一致可参见上文。
layer.load(1); //上传loading
}
, bindAction: '#pfam_run'
, done: function (res, index) {
layer.closeAll('loading'); //关闭loading
ab = '<a href= "' + url_up + '/chart/down?file_id=' + res.id + "&file_downlode_type=txt&ee=1" + '">' + ' <button type="button" class="layui-btn">downlode</button></a>'
$("#down").append(ab)
}
, error: function (index, upload) {
layer.closeAll('loading'); //关闭loading
}
})
;
})
}
function Differential_expression_analysis_run() {
var uploadListIns = upload.render({
elem: '#testList'
, elemList: $('#demoList') //列表元素对象
, url: url_up + '/tools/' + "Differential_expression_analysis" //此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。
, accept: 'file'
, multiple: true
, number: 10
, auto: false
, bindAction: '#testListAction'
, choose: function (obj) {
var that = this;
var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
//读取本地文件
obj.preview(function (index, file, result) {
var tr = $(['<tr id="upload-' + index + '">'
, '<td>' + file.name + '</td>'
, '<td>' + (file.size / 1014).toFixed(1) + 'kb</td>'
, '<td><div class="layui-progress" lay-filter="progress-demo-' + index + '"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
, '<td>'
, '<button class="layui-btn layui-btn-xs demo-reload layui-hide">Re</button>'
, '<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">del</button>'
, '</td>'
, '</tr>'].join(''));
//单个重传
tr.find('.demo-reload').on('click', function () {
obj.upload(index, file);
});
//删除
tr.find('.demo-delete').on('click', function () {
delete files[index]; //删除对应的文件
tr.remove();
uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
});
that.elemList.append(tr);
element.render('progress'); //渲染新加的进度条组件
});
}
, data: {
csrfmiddlewaretoken: '{{ csrf_token }}',
{#b_dom: document.getElementById("b_dom").value,#}
{#b_seq: document.getElementById("b_seq").value,#}
{#e_dom: document.getElementById("e_dom").value,#}
{#e_seq: document.getElementById("e_seq").value,#}
{#align: document.getElementById("align").value,#}
{#clan_overlap: document.getElementById("clan_overlap").value,#}
}
, done: function (res, index, upload) { //成功的回调
var that = this;
//if(res.code == 0){ //上传成功
var tr = that.elemList.find('tr#upload-' + index)
, tds = tr.children();
tds.eq(3).html(''); //清空操作
delete this.files[index]; //删除文件队列已经上传成功的文件
return;
//}
this.error(index, upload);
}
, allDone: function (obj) { //多文件上传完毕后的状态回调
console.log(obj)
}
, error: function (index, upload) { //错误回调
var that = this;
var tr = that.elemList.find('tr#upload-' + index)
, tds = tr.children();
tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
}
, progress: function (n, elem, e, index) {
element.progress('progress-demo-' + index, n + '%');
}
});
}
</script>

View File

@@ -9,7 +9,7 @@
<ul class="layui-tab-title">
{# 选项卡#}
<li>orf</li>
<li>Basics</li>
</ul>
<div class="layui-tab-content" style="height: 100px;">
<form class="layui-form" action="">
@@ -69,22 +69,22 @@
</div> <!-- 开关-默认关 -->
<div class="layui-form-item">
<label class="layui-form-label">Codon preference</label>
<div class="layui-input-block">
<input type="checkbox" id="Codon_preference" name="close" lay-skin="switch"
lay-text="ON|OFF">
</div>
</div> <!-- 开关-默认关 -->
<div class="layui-form-item">
<label class="layui-form-label">Codon frequency</label>
<div class="layui-input-block">
<input type="checkbox" id="Codon_frequency" name="close" lay-skin="switch"
lay-text="ON|OFF">
</div>
</div> <!-- 开关-默认关 -->
{# <div class="layui-form-item">#}
{# <label class="layui-form-label">Codon preference</label>#}
{# <div class="layui-input-block">#}
{# <input type="checkbox" id="Codon_preference" name="close" lay-skin="switch"#}
{# lay-text="ON|OFF">#}
{# </div>#}
{# </div> <!-- 开关-默认关 -->#}
{##}
{##}
{# <div class="layui-form-item">#}
{# <label class="layui-form-label">Codon frequency</label>#}
{# <div class="layui-input-block">#}
{# <input type="checkbox" id="Codon_frequency" name="close" lay-skin="switch"#}
{# lay-text="ON|OFF">#}
{# </div>#}
{# </div> <!-- 开关-默认关 -->#}
<div class="layui-form-item">

View File

@@ -1,52 +1,84 @@
<div class='layui-row' style="margin: 50px">
<div class='layui-col-md9'>
<h1 style="font-size: 50px">Differential expression analysis</h1>
</div>
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
</div>
<div class="layui-panel">
<div style="padding: 20px 30px;">
<div class='layui-row' style="margin-top: 80px; margin-left: 80px">
{# 选项#}
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<div class='layui-col-md9 layui-form-pane'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>counts文件</legend>
</fieldset>
<div class="layui-btn-container" style="display: inline-block">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
{# 选项卡#}
<li>Differential expression analysis</li>
</ul>
<div class="layui-tab-content" style="height: 100px;">
<form class="layui-form" action="">
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal" id="testList">选择多文件</button>
<div class="layui-upload-list" style="max-width: 1000px;">
<table class="layui-table">
<colgroup>
<col>
<col width="150">
<col width="260">
<col width="150">
</colgroup>
<thead>
<tr>
<th>name</th>
<th>size</th>
<th>Upload progress</th>
<th>operation</th>
</tr>
</thead>
<tbody id="demoList"></tbody>
</table>
</div>
<div id="down">
<button type="button" class="layui-btn" id="testListAction">run</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class="layui-panel">
<div style="padding: 20px 30px;">
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<li class="layui-this">function</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div style="margin-left: 30px;">
<p style="font-size: 20px">
Group file suffix is group<br>
The suffix of the statistics file is con<br>
The suffix of the comparison file is TXT<br>
</p>
</div>
</div>
</div>
</div>
<div class='layui-row' style="margin-left: 80px">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>分组文件</legend>
</fieldset>
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
</div>
</div>
</div>
<div class='layui-row' style="margin-left: 80px">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>对比文件</legend>
</fieldset>
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
</div>
</div>
</div>
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
<div class='layui-col-md9'>
<div class="layui-btn-container">
<button type="button" class="layui-btn" id="run">RUN</button>
</div>
</div>
</div>

View File

@@ -1,67 +1,144 @@
<div class='layui-row' style="margin: 50px">
<div class='layui-col-md9'>
<h1 style="font-size: 50px">GO 富集</h1>
</div>
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
</div>
<div class="layui-panel">
<div style="padding: 20px 30px;">
<div class='layui-row' style="margin-top: 80px; margin-left: 80px">
{# 选项#}
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<div class='layui-col-md9 layui-form-pane'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>数据库文件</legend>
</fieldset>
<div class="layui-btn-container" style="display: inline-block">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
</div>
{# 选项卡#}
<li>GO</li>
</ul>
<div class="layui-tab-content" style="height: 100px;">
<form class="layui-form" action="">
</div>
</div>
<div class="layui-form-item">
<div class='layui-row' style="margin-left: 80px">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>差异表达文件</legend>
</fieldset>
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
</div>
<div class="layui-btn-container">
</div>
</div>
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>参数</legend>
</fieldset>
<div class="layui-form-item layui-form layui-form-pane" pane>
<label class="layui-form-label">logFC阈值</label>
<div class="layui-input-inline">
<input type="text" name="logFC" id="logFC" lay-verify="required" placeholder="请输入" autocomplete="off"
class="layui-input">
</div>
<label class="layui-form-label">FDR阈值</label>
<div class="layui-input-inline">
<input type="text" name="FDR" id="FDR" lay-verify="required" placeholder="请输入" autocomplete="off"
class="layui-input">
</div>
<label class="layui-form-label">GO分类</label>
<div class="layui-input-inline">
<select name="GO_s">
<option value="BP" selected>BP</option>
<option value="CC">CC</option>
<option value="MF" selected>MF</option>
<option value="ALL">ALL</option>
</select>
<button type="button" class="layui-btn layui-btn-normal" id="select_orf">select file
</button>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">begin</label>
<div class="layui-input-inline">
<input type="text" name="username" id="begin" lay-verify="number" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">end</label>
<div class="layui-input-inline">
<input type="text" name="username" id="end" lay-verify="number" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Cyclotype</label>
<div class="layui-input-block">
<input type="checkbox" id="Cyclotype" name="close" lay-skin="switch" lay-text="ON|OFF">
</div>
</div> <!-- 开关-默认关 -->
<div class="layui-form-item">
<label class="layui-form-label">Codons</label>
<div class="layui-input-block">
<select name="interest" id="Codons" lay-filter="aihao">
<option value="0" selected="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
</select>
</div>
</div> <!-- 单行选择框 -->
<div class="layui-form-item">
<label class="layui-form-label">outfmt</label>
<div class="layui-input-block">
<select name="interest" id="outfmt" lay-filter="aihao">
<option value="0" selected="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</div>
</div> <!-- 单行选择框 -->
<div class="layui-form-item">
<div class="layui-btn-container">
<div id="down">
<button type="button" class="layui-btn" id="orf_run">run</button>
{# <button type="button" class="layui-btn" id="gen_to_fa_down">downlode</button>#}
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
<div class='layui-col-md9'>
<div class="layui-btn-container">
<button type="button" class="layui-btn" id="run">RUN</button>
</div>
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class="layui-panel">
<div style="padding: 20px 30px;">
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<li class="layui-this">function</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div style="margin-left: 30px;">
<p style="font-size: 20px">Convert standard gff format files to standard gtf
format</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -1,34 +1,128 @@
<div class='layui-row' style="margin: 50px">
<div class='layui-col-md3'>
<h1 style="font-size: 50px">Pfam</h1>
</div>
<div class='layui-col-md9'>
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
</div>
</div>
<div class="layui-panel">
<div style="padding: 20px 30px;">
<div class='layui-row' style="margin-top: 80px; margin-left: 80px">
{# 选项#}
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<div class='layui-col-md9 layui-form-pane'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>fasta文件</legend>
</fieldset>
<div class="layui-btn-container" style="display: inline-block">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
{# 选项卡#}
<li>pfam</li>
</ul>
<div class="layui-tab-content" style="height: 100px;">
<form class="layui-form" action="">
<div class="layui-form-item">
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="select_pfam">select file
</button>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">clan_overlap</label>
<div class="layui-input-inline">
<input type="text" name="username" id="clan_overlap" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">align</label>
<div class="layui-input-inline">
<input type="text" name="username" id="align" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">e_seq</label>
<div class="layui-input-inline">
<input type="text" name="username" id="e_seq" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">e_dom</label>
<div class="layui-input-inline">
<input type="text" name="username" id="e_dom" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">b_seq</label>
<div class="layui-input-inline">
<input type="text" name="username" id="b_seq" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">b_dom</label>
<div class="layui-input-inline">
<input type="text" name="username" id="b_dom" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-btn-container">
<div id="down">
<button type="button" class="layui-btn" id="pfam_run">run</button>
{# <button type="button" class="layui-btn" id="gen_to_fa_down">downlode</button>#}
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class="layui-panel">
<div style="padding: 20px 30px;">
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<li class="layui-this">function</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div style="margin-left: 30px;">
<p style="font-size: 20px">Convert standard gff format files to standard gtf
format</p>
</div>
</div>
</div>
</div>
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>运行</legend>
</fieldset>
<div class="layui-btn-container">
<button type="button" class="layui-btn" id="run">RUN</button>
</div>
</div>
</div>
</div>

View File

@@ -6,5 +6,9 @@ urlpatterns = [
url("(.*\.html$)", views.out_page),
url("gen_to_fa", views.gen_to_fa),
url("gff_to_gtf", views.gff_to_gtf),
url("blast", views.blast)
url("blast", views.blast),
url("orf", views.orf),
url("basics", views.basics),
url("pfam", views.pfam),
url("Differential_expression_analysis", views.Differential_expression_analysis)
]

View File

@@ -1,9 +1,10 @@
import os, time
import os
from Bio import SeqIO
from django.http import JsonResponse
from django.shortcuts import render
from chart import tools
from Bio import SeqIO
def out_page(request, page):
@@ -43,15 +44,6 @@ def gff_to_gtf(request):
return JsonResponse(data)
def gff_to_gtf(request):
file = request.FILES.get("file")
file_path, file_id = tools.path_out("chart")
tools.keep_file(file, file_path)
data = {"id": file_id}
os.system(f"{tools.tools_path}/gffread {file_path} -T -o {file_path}.gtf")
return JsonResponse(data)
def orf(request):
file = request.FILES.get("file", None)
begin = request.POST.get("begin", None)
@@ -66,3 +58,64 @@ def orf(request):
os.system(
f"{tools.tools_path}/ORFfinder {file_path} -b {begin} -e {end} -c {'t' if Cyclotype == 'YES' else 'f'} -g {Codons} -outfmt {outfmt} -out {file_path}.txt")
return JsonResponse(data)
def basics(request):
file = request.FILES.get("file", None)
# Sequence_cleaning = request.POST.get("Sequence_cleaning", None) # 序列清洗
# Sequence_length = request.POST.get("Sequence_length", None) # 序列长度
# GC_content = request.POST.get("GC_content", None) # GC含量
# Sequence_flip = request.POST.get("Sequence_flip", None) # 序列翻转
# Reverse_complementarity = request.POST.get("Reverse_complementarity", None) # 反向互补
# Codon_preference = request.POST.get("Codon_preference", None) # 密码子偏好性
# Codon_frequency = request.POST.get("Codon_frequency", None) # 密码子频率
file_path, file_id = tools.path_out("chart")
tools.keep_file(file, file_path)
josn = {}
for i in request.GET.lists():
if i[0] not in ['_', 'file', 'k']:
josn[i[0]] = i[1][0]
data = {"id": file_id}
tools.Basics(file_path, josn)
return JsonResponse(data)
def pfam(request):
file = request.FILES.get("file", None)
b_dom = request.POST.get("b_dom", None)
b_seq = request.POST.get("b_seq", None)
e_dom = request.POST.get("e_dom", None)
e_seq = request.POST.get("e_seq", None)
align = request.POST.get("align", None)
clan_overlap = request.POST.get("clan_overlap", None)
file_path, file_id = tools.path_out("chart")
tools.keep_file(file, file_path)
data = {"id": file_id}
os.system(
f"{tools.tools_path}/pfam_scan.pl -fasta {file_path} -b_dom {b_dom} -b_seq {b_seq} -e_dom {e_dom} -e_seq {e_seq} -align {align} -clan_overlap {clan_overlap} -dir {tools.tools_path}/db/ -out {file_path}.txt")
return JsonResponse(data)
def Differential_expression_analysis(request):
if request.method == 'POST':
files = request.FILES.getlist('files')
file_path, file_id = tools.path_out("chart")
for f in files:
ty = (f.name).split(".")[-1]
destination = open('%s/%s' % (file_path, ty), 'wb')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
file_path, file_id = tools.path_out("chart")
data = {"id": file_id}
return JsonResponse(data)