Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 30

0
votes
answers
9 views
+10

使用HTML後的HTML文件

0

使用燒瓶和WT的形式我想獲取用戶輸入的形式和重定向用戶輸入到另一個路線,那裏使用輸入功能,這將獲得一些數據字典。使用HTML後的HTML文件

我想要這種數據在WT形式中使用。一旦我看到數據並檢查一切正常。我想將它保存爲數據庫的新條目。

問題:折出表單後,我無法處理爲發佈請求。

@app.route('/', method =[POST,GET]) 
def home(): 
    forms = inputForms(request.form) 
    if form_validate() and request.POST: 
     value=forms.input.data 
     redirect(url_for(/edit, value=value) 
    return render_template('input.html') -- Initial page where getting user input 
    @app.route('/edit', method =[POST,GET]) 
    def edit(value): 
     data= getdata(value) 
     if data == 'error': 
      return render_template('error.html') 
     else: 
      form=request.form(data=data) 
      return render_template('data.html', form=form 
      if form_validate() and request.POST: 
       save() 

我想看到的,一旦使我如何使用它提交表單。

我能夠拿到形式,但一旦回到我不能夠在基於您的評論保存選項

+0

如果通過'redirect'得到了你的'edit' FUNC,我不認爲它仍然是一個'POST'等等'如果request.POST'失敗。 – senaps

+0

感謝您的迴應你可以建議一些其他的方式,我是新的python以及編碼 – Rajesh

沙发
0
0

向前移動,你可以改變你的職位採取行動。所以你的表單是POST編輯到另一條路線。

<form method="POST" action="{{url_for('edit')}}"> 
{{ form.csrf_token }} 
{{ form.name.label }} {{ form.name(size=20) }} 
<input type="submit" value="Go"> 

使用上述在你的模板,那麼你可以將你的功能進行驗證該route

@app.route('/edit', method =[POST,GET]) 
def edit(): 
    if request.method == 'POST' and form.validate(): 
     pass 

這種方式,您可以處理edit路線內的一切。 然後你的home路由可以改變爲只是渲染表單。

@app.route('/', method =[POST,GET]) 
def home(): 
    forms = inputForms(request.form) 
    return render_template('input.html') 

,你應該有你的routes一個trailing slash。所以最好讓你的路線爲:

@app.route('/edit/', method =[POST,GET]) 
def edit(): 
    pass 
0
votes
answers
9 views
+10

有沒有關於python-flask的request.remote_addr的缺陷?或者它是可靠的(沒有反向代理)

0

Gooday to All,我寫下了一個非常敏感的Web應用程序,其功能就像文件瀏覽器,而不是使用sftp/ftp或ssh。它純粹使用http/https。我使用request.remote_addr來確定客戶端的IP地址。如果IP不在列表中,則拒絕。有沒有關於python-flask的request.remote_addr的缺陷?或者它是可靠的(沒有反向代理)

good_ips = ['127.0.0.1','192.168.1.10','192.168.1.1'] 
if request.remote_addr in good_ips: 
    pass 
else: 
    sys.exit() 

它工作正常,但我只想問,這是多麼可靠和安全:)。

如果ip不在列表中,這將是結果。其他明智的網站將運行良好:D。

謝謝你,美好的一天! Result if ip is not in the list

沙发
0
0

不,這不足以在您使用它時構建「敏感」服務。

查看https://en.wikipedia.org/wiki/IP_address_spoofing只是一個可能出錯的開始。

您應該使用身份驗證,例如使用公鑰(SSH支持)或密碼。 Kerberos也是一種可能性。

+0

哦。好的,謝謝你,先生。它不是主要的過濾器。只是一個避開陌生人的層;)但事情是,它不在私人IP上。我計劃做的是把我的公共ip放在那裏。作爲另一層。 (在這些主題上發現了一些問題 https://security.stackexchange.com/questions/105675/ip-spoofing-how-secure-is-to-control-access-by-user-s-public-ip-address) 所以,簡而言之,我不能依靠通過公共ip進行控制訪問。但不管怎麼說,只是爲了另一層保護而添加它;) – screaminghard

板凳
0
0

源IP過濾是否適合您的措施取決於您的確切場景和威脅模型。 @JohnZwinck是正確的,因爲它本身通常是不夠的,但對於某些應用程序來說,它可以。

雖然在單獨的IP數據包中僞造源IP很容易,但是http通過tcp,並且現代實現的tcp受到地址欺騙保護。儘管如此,較舊的TCP實現(在較早的操作系統中)仍然很脆弱。所以如果你的服務器有一個最新的操作系統,那麼欺騙一個源IP並不是一件簡單的事情。使用允許列表中的地址危害客戶端可能更容易。

可能出錯的另一件事與網絡地址轉換(NAT)有關。假設您將應用程序中的訪問限制爲內部IP地址(192.168.0.0/24)。一切正常,但是您的安全部門決定需要爲所有Web應用程序設置反向代理。代理已部署,並且所有工作都正常。然而,現在你的應用程序接收到來自代理服務器的所有請求wuth一個內部地址,所以應用程序中的限制沒有多大意義。客戶端也可能發生類似事件,在某些情況下,客戶端可能會在NAT後面,這意味着它們將具有相同的明顯的客戶端IP地址 - 這可能是好的或壞的。

最好的做法當然是要有正確的驗證(通過密碼,客戶證書,還是多因素等等,但是你固定希望它是),與IP限制是額外的層提供更多安全。

+0

感謝您的信息和見解先生:)是的。我決定在運行時實施登錄系統。 :)我也發現了一些關於代理的答案和解決方案(關於如何使用代理獲得客戶端的IP):)謝謝先生 – screaminghard

0
votes
answers
8 views
+10

爲什麼SQLAlchemy關聯對象中的外鍵標記爲主鍵?

0

以下是sqlalchemy的文檔。爲什麼SQLAlchemy關聯對象中的外鍵標記爲主鍵?

注意如何在關聯類left_id和right_id,他們 第一標記爲ForeignKey的,然後primary_key =真

這是有道理的,我認爲他們應該是外鍵,因爲邏輯上它們是外鍵的其他兩張父母和孩子的桌子。

那麼,讓它們成爲主鍵的目的是什麼呢?

這是怎麼回事?請解釋。

class Association(Base): 
    __tablename__ = 'association' 
    left_id = Column(Integer, ForeignKey('left.id'), primary_key=True) 
    right_id = Column(Integer, ForeignKey('right.id'), primary_key=True) 
    extra_data = Column(String(50)) 
    child = relationship("Child", back_populates="parents") 
    parent = relationship("Parent", back_populates="children") 

class Parent(Base): 
    __tablename__ = 'left' 
    id = Column(Integer, primary_key=True) 
    children = relationship("Association", back_populates="parent") 

class Child(Base): 
    __tablename__ = 'right' 
    id = Column(Integer, primary_key=True) 
    parents = relationship("Association", back_populates="child") 
沙发
0
0

這不是SQLAlchemy特有的。這就是如何設計many-to-many relationships,這是基於關係數據庫設計的原則。

在多對多關係中,需要一個附加表,也稱爲關聯表,它將第一個表中的條目與第二個表中的對應條目進行映射。

當關聯表被定義時,我們需要一些主鍵來唯一標識關聯表中的記錄。使用主鍵可創建索引,從而加快聯合操作和搜索記錄。

那麼,爲什麼所有的外鍵都作爲關聯表的主鍵的一部分呢? 這是爲了確保沒有重複條目atable A和記錄bTable B。換句話說,要確保關係的唯一性,從而避免重複關係。

可以在不將外鍵聲明爲主鍵的情況下創建關聯表。但這是不建議。通過這樣做,除非明確創建索引,否則聯接操作變得緩慢。而且,有很好的機會可以重複記錄Table ATable B之間的關係

0
votes
answers
7 views
+10

如何將模板Flask中的對象顯示爲json?

-4

我有一個路由方法:如何將模板Flask中的對象顯示爲json?

@app.route('/add', methods=['GET']) 
def add_view(): 
    return render_template('add.html', categories=api.categories()) 

然後我試圖顯示categories爲JSON內模板add.html

{{ categories | json }} 

它不工作

+0

請提供什麼行不通的詳細信息,準確。錯誤消息,錯誤的行爲描述,一切 –

沙发
0
0

我覺得很難理解到底是什麼你正在尋找在這裏,所以我想看到更多的細節,但這裏是基於我認爲你問一個答案(我將修改這SUI你的需求/如果事情改變,完全刪除這個評論)。

你調用api.categories()並打算使這是JSON你的HTML模板,是嗎?

確定什麼,我建議你在這裏是爲了確保api.categories()正在返回的dict一個實例。例如,您的通話api.categories()返回應該是這樣的:

{ 
    "testKey1": "testValue1", 
    "testKey2": "testValue2" 
} 

現在在你的HTML模板來渲染這是JSON。您可以使用以下進口導入瓶模塊中的json模塊:

import json 

現在,在您add_view方法的return語句將如下:

return render_template('add.html', categories=json.dumps(api.categories())) 

你現在可以做類似如下在你的HTML模板中:

<script> 
    document.write("{{categories}}"); 
<script> 

這應該爲你呈現你的JSON就好了。

0
votes
answers
6 views
+10

燒瓶JSON響應最後一個元素

0

比方說,我有JSON文件如下:燒瓶JSON響應最後一個元素

{ 
    "task": [ 
    { 
     "description": "Milk, Cheese, Pizza, Fruit, Tylenol", 
     "done": False, 
     "id": 1, 
     "title": "Buy groceries" 
    }, 
    { 
     "description": "Need to find a good Python tutorial on the web", 
     "done": False, 
     "id": 2, 
     "title": "Learn Python" 
    } 
    ] 
} 

我想知道如何能夠在JSON響應訪問的最後一個元素。我曾嘗試下面的代碼遞增,但沒有奏效:

id': request.json['task'][-1]['id'] + 1 
+0

你想要的輸出是什麼? – Ajax1234

+0

我想在代碼中自動incerement id。我的意思是,無論前端會在這裏返回,它必須每次增加 – human

+0

'request.json ['task'] [ - 1] ['id'] + = 1'你的意思是? – Arman

沙发
0
1

如果你想同時增加id S,你可以這樣做:

d = { 
    "task": [ 
    { 
     "description": "Milk, Cheese, Pizza, Fruit, Tylenol", 
     "done": False, 
     "id": 1, 
     "title": "Buy groceries" 
    }, 
    { 
    "description": "Need to find a good Python tutorial on the web", 
    "done": False, 
    "id": 2, 
    "title": "Learn Python" 
    } 
] 
} 
new_d = {"task":[{a:b+1 if a == "id" else b for a, b in i.items()} for i in d['task']]} 

輸出:

{'task': [{'id': 2, 'done': False, 'description': 'Milk, Cheese, Pizza, Fruit, Tylenol', 'title': 'Buy groceries'}, {'id': 3, 'done': False, 'description': 'Need to find a good Python tutorial on the web', 'title': 'Learn Python'}]} 

如果您想增加存在於列表中最後一個字典中的id

d['task'][-1]['id'] += 1 
+0

謝謝你的迴應。但問題是實際的文件很大,這只是一個例子。在我的情況下,我有json文件,每個請求都必須增加id – human

0
votes
answers
6 views
+10

瓶頸URL路由在所有頁面上失敗,但索引(/)

0

我正在使用Flask和Blueprints製作複雜的應用程序。當我運行它並使用「/」路徑請求模塊索引功能時,它工作得很好。但是,只要我添加另一個頁面/函數(例如/下面的示例中的驗證程序/ dhashboard或任何其他),它就會將此鏈接路由到404.瓶頸URL路由在所有頁面上失敗,但索引(/)

這是我的「backoffice」模塊之一的代碼所謂的 「驗證器」:

from flask import Blueprint, render_template 

from backoffice import login_required 
from backoffice import app 


# Define Blueprint 

mod_verificator = Blueprint("verificator", __name__, url_prefix='/verificator/', template_folder="templates") 


@mod_verificator.route('/', methods=['GET', 'POST']) 
@login_required 
def verificator(): 
    return render_template("verificator.html") 


@mod_verificator.route('/dashboard/', methods=['GET', 'POST']) 
def dashboard(): 
    return render_template("dashboard.html") 


# Register blueprint(s) 
app.register_blueprint(mod_verificator) 

和日誌輸出:

2017-11-25 22:55:14,614 : DEBUG : verificator: 12: <module> : _ name _: backoffice.mod_verificator.verificator 
2017-11-25 22:55:14,614 : DEBUG : verificator: 13: <module> : mod_name : verificator 

2017-11-25 22:57:17,459 : INFO : _internal: 87: _log : 127.0.0.1 - - [25/Nov/2017 22:57:17] "GET /verificator/ HTTP/1.1" 200 - 
2017-11-25 22:57:40,902 : INFO : _internal: 87: _log : 127.0.0.1 - - [25/Nov/2017 22:57:40] "GET /verificator/dashboard/ HTTP/1.1" 404 - 

如此, 「驗證器」 模塊渲染模板(200和HTTP代碼)和驗證器/儀表板失敗慘與404

我完全失去了,並尋求你的幫助!

+1

奇怪...也許溝結尾的斜線:'url_prefix =「/驗證器」 '在Blueprint實例化中(我總是這樣定義它們) – abigperson

沙发
0
2

根據您url_prefix設置,可以設置尾部的斜槓爲/verificator/,如果你想獲得儀表盤,你需要的網址,您的瀏覽器:

http://127.0.0.1:5000/verificator//dashboard/

不過,你最好刪除結尾的斜線是/verificator,這樣就可以通過訪問:

http://127.0.0.1:5000/verificator/dashboard/

+0

確實有效。很簡單!非常感謝! – uzla

0
votes
answers
6 views
+10

flask - sqlalchemy - 自引用查詢

0

我嘗試在sqlalchemy中進行查詢以獲取在父級和子級上過濾的自引用關係。flask - sqlalchemy - 自引用查詢

category_country = Table('category_country', Base.metadata, 
    Column('category_id', Integer, ForeignKey('category.id'), primary_key=True), 
    Column('country_id', Integer, ForeignKey('country.id'), primary_key=True) 
) 

class Category(Base): 
    __tablename__ = "category" 
    id = Column(Integer, primary_key=True, autoincrement=True) 
    parent_id = Column(Integer, ForeignKey('category.id')) 
    subcategories = relationship("Category", backref=backref('parent', remote_side=id)) 
    countries = relationship(Country, secondary = category_country, backref='categories') 

class Country(Base): 
    __tablename__ = "country" 
    id = Column(Integer, primary_key=True) 

查詢

category = s.query(Category).join(Category.countries).options(contains_eager(Category.countries)).filter(Country.id == 1).filter(Category.id == category_id).join(Category.countries, aliased=True).join(Category.subcategories, aliased=True).options(contains_eager(Category.countries)).filter(Country.id == 1).first() 

,但它不工作。我需要找到孩子這是從國家1和其父是CATEGORY_ID和國家也是1

沙发
0
0

我沒有完全得到我的第一次讀你的模型/代碼,但我會解決這個的辦法是通過拆分自我指涉加入到子查詢()語句這樣的:

filter_by_country = (db.session.query(...) 
        .filter(...) 
        .subquery()) 

final_results = (db.session.query(...) 
       .join(filter_by_country, 
         db.and_(Category.id == filter_by_country.c.id, ..., ...)) 
       .options(...) 
       .filter(...) 
       .etc(...).first()) 

我發現這種模式可以幫助簡化這些類型的查詢。希望這可以幫助。

0
votes
answers
5 views
+10

蟒蛇*僅在服務器列表語法錯誤,代碼本地客戶機上工作正常

1

當我執行我的外部瓶服務器上我的代碼,我得到以下服務器端錯誤:蟒蛇*僅在服務器列表語法錯誤,代碼本地客戶機上工作正常

2017-12-03 02:40:53 ", line 
2017-12-03 02:40:53 430 
2017-12-03 02:40:53 
2017-12-03 02:40:53  
2017-12-03 02:40:53 combinedheader = ["Protein", "MW", *listheadersSpC, *listheadersNSAF, *listheadersloge] 
2017-12-03 02:40:53  
2017-12-03 02:40:53 
2017-12-03 02:40:53^
2017-12-03 02:40:53 SyntaxError 
2017-12-03 02:40:53 : 
2017-12-03 02:40:53 invalid syntax 
2017-12-03 02:40:53 

這是行導致悲傷的代碼:
combinedheader = ["Protein", "MW", *listheadersSpC, *listheadersNSAF, *listheadersloge]

在本地,代碼運行得很好。還要注意的是,當在服務器上單獨執行下面的代碼返回沒有錯誤:

list1 = ['a'] 
list2 = ['d' , 'e' , 'f'] 
list3 = ["Hi", "there", *list1, *list2] 
print(list3) 

Retuns:[ '您好', '有', '一個', 'd', 'E', 'F']

編輯:代碼運行在使用Python的虛擬環境的Web應用程序上。 webapp和virtualenv python = 3.6。本地客戶端運行相同版本的Python,相同的已安裝模塊。

+0

I認爲你在服務器上使用了錯誤版本的python(可能是2.x),你最好確認服務器python的版本號 – hsfzxjy

+0

謝謝,我在發佈這個問題之前檢查了它服務器:版本3.6。本地版本:版本3.6 – PeptideWitch

+0

但是你可能會想到某些東西,也許我在服務器上設置的虛擬環境沒有正確傳遞我的代碼,只需再次檢查,主服務器使用2.7.6,而我的虛擬環境使用3.6。是吧;會報告回 – PeptideWitch

沙发
0
1

代碼os.system("python myscript.py")不會總是使用您當前的解釋器。相反,它取決於環境變量。所以你必須明確指定解釋器的絕對路徑。

對於大多數情況,您可以使用sys.executable獲取當前的翻譯。然而,它不適用於uwsgi :-(其中sys.executable將返回uwsgi二進制文件的路徑。因此,在這種情況下,您必須將可執行路徑硬編碼到virtualenv解釋器,如下所示:os.system("path/to/venv/python myscript.py")

+0

工作就像一個魅力,感謝指導我通過這個過程 – PeptideWitch

0
votes
answers
4 views
+10

插入HTML到MySQL數據庫顯示類型錯誤

-3

我正在開發一個Web應用程序使用Flask。在某些時候,我必須插入某些HTML腳本到MySQL數據庫:插入HTML到MySQL數據庫顯示類型錯誤

<h3>Welcome!</h3> 
<p>Some text</p> 

當我將其插入到數據庫中(當它被瓶中的「render_template」函數返回):



<h3>Welcome!</h3>



<p>Some text</p> 

我得到以下錯誤:

TypeError: ProgrammingError(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\\\\n\\n<h3>Welcome!</h3>\\n\\n\\n\\n<p>Some text' at line 1") is not JSON serializable

我第一次不明白什麼JSON序列化「的意思,我想知道我做錯了。我已經嘗試脫線( ),但它仍然顯示相同的錯誤。爲什麼?我很感謝你能提供的任何答案。

+0

where is SQL query? – furas

沙发
0
0

編寫HTML時數據庫通常用於甲解決方案:

1)簡單地轉換數據庫字段類型成團塊這樣它將接受二進制數據,然後編碼HTML爲二進制(下面例子)。 2)將數據庫字段保留爲文本字段,但base64對數據進行編碼,以便數據庫不會抱怨非法字符。

# Example for case 1. 
# Note that you need to make sure the database field is a blob: 
html = '<h3>Welcome!</h3>
<p>Some text</p>' 
bin = html.encode() 
dbhandle.execute('INSERT INTO script (various fields, binhtml) VALUES (..., bin)') 
# When you read back the data, remember to decode. 
dbhandle.execute('SELECT binhtml FROM script WHERE...') 
resultset = dbhandle.fetchall() 
htmlresult = resultset.decode() 

# Example for case 2. 
# Database field can be a text/varchar type because base64 ensures it will work. 
import base64 
html = '<h3>Welcome!</h3>
<p>Some text</p>' 
# Convert HTML into base64 encoded *text* so it can be stored in text field. 
encoded = base64.b64decode(html.encode()).decode() 
# Do the database INSERT. 
... 
# Retrieve the stored text from the database and convert back to HTML 
dbhandle.execute('SELECT encodedhtml FROM script WHERE...') 
resultset = dbhandle.fetchall() 
htmlresult = base64.b64decode(resultset).decode() 
0
votes
answers
4 views
+10

Python日程安排在Flask中不起作用

1

我正在將Schedule導入Flask。我的項目包含WSGI但我對FlaskWSGI之間的關係知之甚少。現在我有三個主要文件:Python日程安排在Flask中不起作用

  • wsgi.py:自動生成其他工具。
  • app.py:我在這裏提出客戶請求。用於測試Schedule

我想在啓動服務器時啓動一項長期任務。這裏是wsgi.py部分:

# -*- coding: utf-8 -*- 
from threading import Thread 
import test 


t = Thread(target=test.job) 
t.start() 

if __name__ == '__main__': 
    ... 

正如你看到我啓動一個線程,並讓it.Here就業工作是我的test.py

import schedule 


def job(): 
    schedule.every(1).seconds.do(pr) 


def pr(): 
    print("I'm working...") 

我的問題是,job永遠不會發生。

沙发
0
0

我發現我的問題,我從來沒有讓日程表執行任務。現在wsgi.py看起來像這樣。

# -*- coding: utf-8 -*- 
from threading import Thread 
import test 

schedule.every(1).seconds.do(test.job) 
t = Thread(target=test.run_schedule) 
t.start() 

if __name__ == '__main__': 
    ... 

而且test.py

import schedule 
import time 

start_time = time.time() 


def job(): 
    print("I'm working..." + str(time.time() - start_time)) 


def run_schedule(): 
    while True: 
     schedule.run_pending() 
     time.sleep(1) 

爲了在單獨的線程工作,我創建一個線程,該線程我循環每1ms。在循環中,schedule調用run_pending如果超時(在我的情況下爲1秒)調用job