Я изучаю flask и пытался создать бэкэнд flask и создать остальные apis и использовать mongoengine для базы данных. python app.py
работал успешно, но когда я передаю адрес электронной почты и пароль в почтальоне, я получаю The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret
при регистрации пользователя. может кто-нибудь помочь мне указать, где я ошибся?
app.py
from flask import Flask,render_template,request,redirect,url_for,send_file,make_response,jsonify
import sys
from flask_cors import CORS
from configuration import config
import json
from flask_login import LoginManager, login_required, login_user, logout_user, current_user
from functools import wraps, update_wrapper
from datetime import datetime
import time
app=Flask(__name__, static_folder="build/static", template_folder="build")
app.config['MONGO_DBNAME'] = "learning"
app.config["MONGO_URI"] = 'mongodb://localhost:27017/learning'
app.config['JWT_SECRET_KEY'] = 'secret'
CORS(app)
from crud import insert, read
#Initialising flask login manager
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "render_loginpage"
@login_manager.user_loader
def user_loader(id):
user=read.user_loader(id)
return user
@login_manager.unauthorized_handler
def unauthorized_handler():
return redirect(url_for('render_loginpage'))
def nocache(view):
@wraps(view)
def no_cache(*args, **kwargs):
response = make_response(view(*args, **kwargs))
response.headers['Last-Modified'] = datetime.now()
response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '-1'
return response
return update_wrapper(no_cache, view)
@app.route('/api/register',methods=['POST'])
def register_user():
data=request.data
return insert.register(json.loads(data))
if __name__=='__main__':
app.run(host='0.0.0.0',port=5000,debug=True)
insert.py
from models.models import User,user_metadata
from datetime import datetime,timedelta
from werkzeug.security import generate_password_hash,check_password_hash
import uuid
import json
import requests
import re
import uuid
import string
import datetime
from validate_email import validate_email
import sys
sys.path.insert(0, '../')
from configuration import config
from flask import redirect,url_for
from flask_login import LoginManager, login_required, login_user, logout_user, current_user
def register(data):
try:
if len(data['username'])>4 and len(data['password'])>6 and validate_email(data['email'])==True:
userid = str(uuid.uuid4())
User(userid=userid,name=data['username'],email=data['email'],password=generate_password_hash(data['password']),date_added=datetime.datetime.utcnow(),verifiedemail=True).save()
exp = datetime.datetime.utcnow() + timedelta(days=2)
user_metadata(userid=userid, active=True, expire_date=exp).save()
user = User.objects(email=data['emailid']).first()
login_user(user)
return 'verified'
else:
if len(data['username'])<5:
raise Exception('Given Name is too short')
elif len(data['password'])<6:
raise Exception('Given Password is too short')
elif validate_email(data['email'])==None:
raise Exception('Given Email Id format is invalid')
except Exception as e:
errormessage=str(e)
errorname=errormessage.split(') (')
if errorname[0]=='(pymysql.err.IntegrityError':
return 'This Email Id already exists'
else:
return errormessage
models.py
import datetime
from flask_login import UserMixin
from flask_mongoengine import MongoEngine
import sys
sys.path.append('../')
from configuration import config
db = MongoEngine()
class User(UserMixin, db.Document):
userid = db.StringField(required=True,primary_key=True)
name = db.StringField()
email= db.StringField()
date_added = db.DateTimeField()
password= db.StringField()
verifiedemail= db.BooleanField()
def is_active(self):
return True
def get_id(self):
return self.userid
def is_authenticated(self):
return True
def is_anonymous(self):
return False
class user_metadata(db.Document):
userid=db.StringField(primary_key=True)
active=db.BooleanField()
expire_date=db.DateTimeField(default=datetime.datetime.utcnow())
if __name__ == "__main__":
Base.metadata.create_all(bind=engine)
config.py
databasedetails={
'hostname':'mongodb://localhost:27017/learning',
'databasename':'learning',
'port':'27017',
}