2017-10-14 12 views
0

Je travaille sur un site qui se connecte à un autre site et obtient des données. J'utilise flask et demande la bibliothèque. Mon code obtient le login et le mot de passe des entrées dans les modèles html. Tout est ok jusqu'à ce que j'essaie d'obtenir une autre page. Ensuite, je perds la session connectée.Comment conserver la session?

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 

Répondre

0

Vous devez stocker le nom d'utilisateur et mot de passe quelque part (par exemple: flask.session) et vérifier si l'utilisateur connecté sur chaque itinéraire que vous avez (ou peut-être sur app.before_request). Si non - rediriger vers le formulaire de connexion, sinon - utiliser le login/mot de passe pour les demandes

+0

Puis-je enregistrer la session dans les cookies? Est-ce une bonne pratique? –

+0

btw Je ne veux pas garder le nom d'utilisateur et mot de passe dans les cookies –

+0

@AdrianOleszczak se pencher sur [Flask-Session] (https://pythonhosted.org/Flask-Session/) qui est une extension pour Flask qui ajoute le support pour Server- Side Session à votre demande. –