0
私は別のサイトにログインしてデータを取得するサイトで作業しています。私はフラスコと要求ライブラリを使用しています。私のコードはhtmlテンプレートの入力からログインとパスワードを取得します。私は別のページを取得しようとするまで、すべてが大丈夫です。その後、私はログインしたセッションを失います。セッションを維持するには?
views.py
from LibrusMobile import app
from flask import render_template, request
from core.forms import LoginForm
from core.utils import Site
import lxml.html
@app.route('/', methods=['GET', 'POST'])
def main_page():
form = LoginForm()
if request.method == 'POST':
username=request.form['username']
password=request.form['password']
path=Site.user_path
s=Site.login(username, password)
url='https://link.com/index'
user_response=Site.get_content(Site, s, url, path)
user=', '.join([str(x) for x in user_response])
context={
"user": user.replace("(", "- "),
}
return render_template("start_page.html", context=context)
return render_template("index.html", form=form)
@app.route('/marks')
def marks():
url='https://link.com/marks'
#Here i have a problem
return render_template("marks.html")
utils.py
import requests
import lxml.html
class Site():
user_path = '//*[@id="user-section"]/b/text()[1]'
@staticmethod
def login(login, passwd):
url = 'https://link.com/login'
with requests.session() as s:
log_in=s.get(url)
log_in_html= lxml.html.fromstring(log_in.text)
hidden_inputs = log_in_html.xpath(r'//form//input[@type="hidden"]')
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}
form['login']=login
form['passwd']=passwd
request=s.post(url, data=form, stream=True)
return s
def get_content(self, session, url, path):
response=session.get(url)
b=lxml.html.fromstring(response.text)
text=b.xpath(path)
return text
セッションをクッキーに保存できますか?それは良い練習ですか? –
btw私はユーザー名とパスワードをクッキーに保存したくありません –
@AdrianOleszczakはFlaskの拡張機能である[Flask-Session](https://pythonhosted.org/Flask-Session/)サイドセッションをアプリケーションに追加します。 –