Python 如何使用API将os.fork与sqlalchemy core和flask结合使用?
我已创建一个用户,并希望向该用户的邮件id发送电子邮件,详细信息如下:Python 如何使用API将os.fork与sqlalchemy core和flask结合使用?,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我已创建一个用户,并希望向该用户的邮件id发送电子邮件,详细信息如下: def send_new_user_mail(new_user_id, plain_passwd): ''' Send mail to new user added ''' s1 = select([users]).where(users.c.id == new_user_id) rs1 = conn.execute(s1).fetchone() if rs1:
def send_new_user_mail(new_user_id, plain_passwd):
'''
Send mail to new user added
'''
s1 = select([users]).where(users.c.id == new_user_id)
rs1 = conn.execute(s1).fetchone()
if rs1:
msg = Message("You are registered to use DMS",
sender=app.config['DEFAULT_MAIL_SENDER'],
recipients=[rs1[users.c.email]])
print g.referer, 'g.referer'
user_details = ('username: ' + rs1[users.c.email] + '<br>' +
'password:' + plain_passwd)
# TODO: send change password link
chg_passwd = ('<br><br>You can change password by visiting: ' +
'<a href=url_for("change_password")>' +
url_for("change_my_password", user_id=rs1[users.c.id]) +
'</a>')
chg_passwd = ''
msg.html = ('url: ' + '<a href=' + str(g.referer) + '>' +
g.referer + '</a></br><br>' + user_details +
chg_passwd)
print msg.html, 'msg.html'
try:
with app.app_context():
mail.send(msg)
return True
except Exception, e:
print e
return False
conn1.close()
return
@app.route('/sf/api/v1.0/users', methods=['POST'])
def add_user():
'''
Add a user
'''
if 'id' in session:
data = request.get_json(force=True)
trans = conn.begin()
try:
if 'first_name' in data:
data['first_name'] = data['first_name'].title()
if 'last_name' in data:
data['last_name'] = data['last_name'].title()
ins = users.insert().values(data)
rs = conn.execute(ins)
mnew_user = rs.inserted_primary_key[0]
mfolder = create_ftp_user_source_folder(mnew_user)
trans.commit()
for g in mgroups:
ins2 = users_groups.insert().values(
user=mnew_user,
group=g)
rs2 = conn1.execute(ins2)
except Exception, e:
print e
trans.rollback()
return jsonify({'message': "Invalid / duplicate details"}), 400
# user FTP source folder exists
if mfolder:
# new_child_proc = 0
new_child_proc = os.fork()
print new_child_proc, 'new_child_proc'
if new_child_proc == 0:
x = send_new_user_mail(mnew_user, plain_passwd)
os._exit(0)
else:
print 'child:', new_child_proc
return jsonify({'id': mnew_user}), 201
else:
return jsonify(
{'message': "Cannot create FTP source/already exists"}), 403
return jsonify({'message': "UNAUTHORIZED"}), 401
def发送新用户邮件(新用户id,普通密码):
'''
向添加的新用户发送邮件
'''
s1=选择([users])。其中(users.c.id==新用户id)
rs1=conn.execute(s1).fetchone()
如果rs1:
msg=消息(“您已注册使用DMS”,
sender=app.config['DEFAULT\u MAIL\u sender'],
收件人=[rs1[users.c.email]]
打印g.referer,“g.referer”
用户详细信息=('username:'+rs1[users.c.email]+'
'+
“密码:”+普通密码)
#TODO:发送更改密码链接
chg_passwd=('
您可以通过访问来更改密码:'+
'')
chg_passwd=“”
msg.html=('url:'+'
'+用户详细信息+
chg_passwd)
打印msg.html,“msg.html”
尝试:
使用app.app_context():
邮件发送(msg)
返回真值
除例外情况外,e:
打印e
返回错误
conn1.close()
返回
@app.route('/sf/api/v1.0/users',方法=['POST'])
def add_user():
'''
添加用户
'''
如果会话中有“id”:
data=request.get_json(force=True)
trans=连接开始()
尝试:
如果数据中有“名字”:
数据['first_name']=数据['first_name'].title()
如果数据中有“姓氏”:
数据['last_name']=数据['last_name'].title()
ins=用户.insert().值(数据)
rs=conn.execute(ins)
mnew_user=rs.inserted_主键[0]
mfolder=创建\u ftp\u用户\u源\u文件夹(mnew\u用户)
trans.commit()
对于管理组中的g:
ins2=用户组.insert().值(
user=mnew_user,
组=g)
rs2=conn1.execute(ins2)
除例外情况外,e:
打印e
事务回滚()
返回jsonify({'message':“无效/重复的详细信息”}),400
#存在用户FTP源文件夹
如果是mfolder:
#新建子进程=0
new_child_proc=os.fork()
打印新子进程,“新子进程”
如果new_child_proc==0:
x=发送新用户邮件(mnew用户,普通密码)
操作系统退出(0)
其他:
打印“child:”,新的子进程
返回jsonify({'id':mnew_user}),201
其他:
返回jsonify(
{'message':“无法创建FTP源/已存在”}),403
返回jsonify({'message':“UNAUTHORIZED”}),401
我尝试了此代码,但出现错误:
还添加了代码的其他部分。如果用户已属于某个组,则不会将其添加到un users\U groups,而是继续。添加新用户时,还将在文件系统中创建一个源文件夹。
正如所建议的,我在将值存储在变量中后进行了分叉并进行了尝试,但仍然得到相同的错误。有没有更好的解决办法
(psycopg2.DatabaseError)SSL错误:解密失败或记录错误
苹果
连接池出现了一些错误,我不知道如何在这里使用它。请导游。烧瓶。0.11、python 2.7、sqlalchemy core 1.0.8通过删除fork后面的查询部分,按照@inverio的建议更新我的答案:
def send_new_user_mail(memail_id, plain_passwd, mnew_user):
'''
Send mail to new user added to dms with url
'''
msg = Message("You are registered to use DMS",
sender=app.config['DEFAULT_MAIL_SENDER'],
recipients=[memail_id])
user_details = ('username: ' + memail_id + '<br>' +
'password:' + plain_passwd)
chg_passwd = ''
msg.html = ('url: ' + '<a href=' + str(g.referer) + '>' +
g.referer + '</a></br><br>' + user_details +
chg_passwd)
try:
with app.app_context():
mail.send(msg)
return True
except Exception, e:
print e
return False
conn1.close()
return
@app.route('/sf/api/v1.0/users', methods=['POST'])
def add_user():
'''
Add a user and select his group(s)
'''
if 'id' in session:
if session['email'].split("@")[0] == 'ytms.admin' and \
session['flag'] is True:
mgroups = []
mnew_user = None
mfolder = None
memail = None
data = request.get_json(force=True)
if data['password']:
# pass
plain_passwd = data['password']
mypass = pwd_context.encrypt(data['password'])
data['password'] = mypass
if "groups" not in data:
return jsonify({'message': "Cannot add without group(s)"}), 400
for g in data["groups"]:
mgroups.append(g)
del data["groups"]
print data, 'data'
trans = conn.begin()
try:
if 'first_name' in data:
data['first_name'] = data['first_name'].title()
if 'last_name' in data:
data['last_name'] = data['last_name'].title()
ins = users.insert().values(data)
rs = conn.execute(ins)
mnew_user = rs.inserted_primary_key[0]
mfolder = create_ftp_user_source_folder(mnew_user)
memail = data['email']
trans.commit()
for g in mgroups:
ins2 = users_groups.insert().values(
user=mnew_user,
group=g)
rs2 = conn1.execute(ins2)
except Exception, e:
print e
trans.rollback()
return jsonify({'message': "Invalid / duplicate details"}), 400
# user FTP source folder exists
if mfolder:
new_child_proc = os.fork()
if new_child_proc == 0:
x = send_new_user_mail(memail, plain_passwd, mnew_user)
os._exit(0)
else:
print 'child:', new_child_proc
return jsonify({'id': mnew_user}), 201
else:
return jsonify(
{'message': "Cannot create FTP source/already exists"}), 403
return jsonify({'message': "UNAUTHORIZED"}), 401
def发送新用户邮件(memail\u id、plain\u passwd、mnew\u user):
'''
使用url向添加到dms的新用户发送邮件
'''
msg=消息(“您已注册使用DMS”,
sender=app.config['DEFAULT\u MAIL\u sender'],
收件人=[memail_id])
用户详细信息=('username:'+memail_id+'
'+
“密码:”+普通密码)
chg_passwd=“”
msg.html=('url:'+'
'+用户详细信息+
chg_passwd)
尝试:
使用app.app_context():
邮件发送(msg)
返回真值
除例外情况外,e:
打印e
返回错误
conn1.close()
返回
@app.route('/sf/api/v1.0/users',方法=['POST'])
def add_user():
'''
添加用户并选择其组
'''
如果会话中有“id”:
如果会话['email'].split(“@”)[0]='ytms.admin'和\
会话['flag']为真:
mgroups=[]
mnew_用户=无
mfolder=无
memail=无
data=request.get_json(force=True)
如果数据['password']:
#通过
普通密码=数据['password']
mypass=pwd_context.encrypt(数据['password'])
数据['password']=mypass
如果“组”不在数据中:
返回jsonify({'message':“不能在没有组的情况下添加)”),400
对于数据[“组”]中的g:
管理组追加(g)
del数据[“组”]
打印数据,“数据”
trans=连接开始()
尝试:
如果数据中有“名字”:
数据['first_name']=数据['first_name'].title()
如果数据中有“姓氏”:
数据['last_name']=数据['last_name'].title()
ins=用户.insert().值(数据)
rs=conn.execute(ins)
mnew_user=rs.inserted_主键[0]
mfolder=创建\u ftp\u用户\u源\u文件夹(mnew\u用户)
memail=data['email']
trans.commit()
对于管理组中的g:
ins2=用户组.insert().值(
user=mnew_user,
组=g)
rs2=conn1.execute(ins2)
除例外情况外,e:
打印e
事务回滚()
返回jsonify({'message':“无效/重复的详细信息”}),400
#存在用户FTP源文件夹
如果