2016-08-20 1 views
0

J'ai un problème dans mon application, j'essaie d'exécuter un code dans flask avec py2neo. J'ai dernière version de Neo4j et python2.7requête py2neo et flask

Voici mon code pour fucntion en classe USER

class User: 
    def __init__(self, username): 
      self.username = username 
    def find(self): 
      user = graph.find_one("User", "username", self.username) 
    def add_challenge(self,challenge_title,total_question_per_user,challengecat,percentage_question,prize,ranks,challenge_status): 
      query = ''' 
      MATCH (u:User),(p:Prize),(ca:Category) 
      WHERE u.username = {username} and p.pid = {prize} and ca.catname = {challengecat} 
      CREATE (ch:Challenge {chid: str(uuid.uuid4()),challenge_title: {challenge_title}, total_question_per_user: {total_question_per_user},challenge_status: {challenge_status},timestamp:timestamp(),date:date()}), 
      (p)-[:BELONG {rank: {ranks} }]->(ch),(ca)-[:BELONG {percentage_question: {percentage_question} }]->(ch) 
      ''' 

      return graph.run(query,username=self.username,prize=prize,challengecat=challengecat,challenge_title=challenge_title,total_question_per_user=total_question_per_user,challenge_status=challenge_status,ranks=ranks,percentage_question=percentage_question) 

J'appelle de mon dossier de vue et j'importer la classe utilisateur dans le fichier de vue, mais quand je lance ce la page il montre erreur

ce fichier est vue code f

@app.route('/admin/add/challenge', methods = ['GET', 'POST']) 
def admin_add_challenge(): 
    if not session.get('username'): 
      return redirect(url_for('admin_login')) 
    if request.method == 'POST': 
      challenge_title = request.form['challenge_title'] 
      total_question_per_user = request.form['total_question_per_user'] 
      challengecat = request.form['challengecat'] 
      percentage_question = request.form['percentage_question'] 
      prize = request.form['prize'] 
      ranks = request.form['ranks'] 
      challenge_status = request.form['challenge_status'] 

      if not challenge_title or not total_question_per_user or not ranks: 
        if not challenge_title: 
          flash('Please Enter Challenge') 
        if not total_question_per_user: 
          flash('Please Enter Number of question Per Player') 
        if not ranks: 
          flash('Please Enter Ranks for win this Challenge') 
      else: 
User(session['username']).add_challenge(challenge_title,total_question_per_user,challengecat,percentage_question,prize,ranks,challenge_status) 
        flash('Challenge Added successfully') 
        return redirect(url_for('admin_add_challenge')) 

    categories = get_categories() 
    prizes = get_prizes() 
    return render_template('admin/admin_add_challenge.html',categories=categories,prizes=prizes) 

Voici l'erreur lorsque je présente sous forme de défi à la page http://sitename/admin/add/challenge

ERROR in app: Exception on /admin/add/challenge [POST] 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1988, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1641, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1544, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1625, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/root/gamepro/ddqcore/views.py", line 430, in admin_add_challenge 
    User(session['username']).add_challenge(challenge_title,total_question_per_user,challengecat,percentage_question,prize,ranks,challenge_status) 
    File "/root/gamepro/ddqcore/models.py", line 285, in add_challenge 
    return graph.run(query,username=self.username,prize=prize,challengecat=challengecat,challenge_title=challenge_title,total_question_per_user=total_question_per_user,challenge_status=challenge_status,ranks=ranks,percentage_question=percentage_question) 
    File "/usr/local/lib/python2.7/site-packages/py2neo/database/__init__.py", line 731, in run 
    return self.begin(autocommit=True).run(statement, parameters, **kwparameters) 
    File "/usr/local/lib/python2.7/site-packages/py2neo/database/__init__.py", line 1277, in run 
    self.finish() 
    File "/usr/local/lib/python2.7/site-packages/py2neo/database/__init__.py", line 1296, in finish 
    self._sync() 
    File "/usr/local/lib/python2.7/site-packages/py2neo/database/__init__.py", line 1286, in _sync 
    connection.fetch() 
    File "/usr/local/lib/python2.7/site-packages/py2neo/packages/neo4j/v1/bolt.py", line 337, in fetch 
    self.acknowledge_failure() 
    File "/usr/local/lib/python2.7/site-packages/py2neo/packages/neo4j/v1/bolt.py", line 284, in acknowledge_failure 
    fetch() 
    File "/usr/local/lib/python2.7/site-packages/py2neo/packages/neo4j/v1/bolt.py", line 337, in fetch 
    self.acknowledge_failure() 
    File "/usr/local/lib/python2.7/site-packages/py2neo/packages/neo4j/v1/bolt.py", line 284, in acknowledge_failure 
    fetch() 
    File "/usr/local/lib/python2.7/site-packages/py2neo/packages/neo4j/v1/bolt.py", line 322, in fetch 
    raw.writelines(self.channel.chunk_reader()) 
    File "/usr/local/lib/python2.7/site-packages/py2neo/packages/neo4j/v1/bolt.py", line 173, in chunk_reader 
    chunk_header = self._recv(2) 
    File "/usr/local/lib/python2.7/site-packages/py2neo/packages/neo4j/v1/bolt.py", line 156, in _recv 
    raise ProtocolError("Server closed connection") 
ProtocolError: Server closed connection 
49.32.44.55 - - [20/Aug/2016 06:49:05] "POST /admin/add/challenge HTTP/1.1" 500 - 
+0

En fait problème dans ma requête pour Neo4j MATCH (u: Utilisateur), (p: Prix), (ca: Catégorie) O WH u.username = {nom d'utilisateur} et p.pid = {prix} et ca.catname = {base de données requête = '' ' challengeecat} CREATE (ch: défi {chid: str (uuid.uuid4()), challenge_title: {challenge_title}, total_question_per_user: {total_question_per_user}, état_de_preuve: {challenge_status}, horodatage: timestamp(), date: date()}), (p) - [: BELONG {rang: {rangs}}] -> (ch), (ca) - [: BELONG {nombre_question: {percentage_question}}] -> (ch) '' ' – csr

Répondre

0

en Python 2.7 et version py2neo 3, nous ne pouvons pas utiliser requête comme cela, nous avons besoin d'interroger comme celui-ci

selector = NodeSelector(graph) 
      selected_user = selector.select("User", username=user) 
      selected_prize = selector.select("Prize", pid=prize) 
      selected_cat = selector.select("Category",catname = challengecat) 
      challenge = Node("Challenge",chid=str(uuid.uuid4()),challenge_title=challenge_title,total_question_per_user=total_question_per_user,challenge_status=challenge_status,timestamp=timestamp(),date=date()) 
      rel = Relationship(selected_user,"ADDED",challenge) 
      rel1 = Relationship(selected_prize,"BELONG",challenge) 
      rel2 = Relationship(selected_cat,"BELONG",challenge) 
      graph.create(rel) 
      graph.create(rel1) 
      graph.create(rel2) 

Merci CSR