I am using MongoDB Atlas Shared Clusters (free ones), and I'd like to update a point attribute of Users whenever the referral code of that user is used. Here is the full code, the problem is in "increase_points" function, because I can add new users. The interesting part is, in "submit()", we can use "existing_user = User.objects(email=email).first()" however, I can not search with it in "increase_point" function. I wrote 2 txt file creation code since I was not sure about logs, so want to see. However, it does nto create those txt files.
Thanks in advance.
from flask import Flask, request, redirect, url_for, flash, render_template
from flask_mongoengine import MongoEngine
import os
import string
import random
from datetime import datetime
import logging
logging.basicConfig(level=logging.DEBUG)
app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
'db': 'kanzy-db',
'host': 'mongodb+srv://hhuseyinsenoll:[email protected]/kanzy-db?retryWrites=true&w=majority',
'username': 'hhuseyinsenoll',
'password': 'kanzydb11',
'authentication_source': 'admin' # Assuming admin is your auth source
}
app.config['SECRET_KEY'] = 'your_secret_key' # Add a real secret key
# Initialize MongoDB
db = MongoEngine(app)
# Define the User Model
class User(db.Document):
email = db.StringField(required=True, unique=True)
referral_code = db.StringField(required=True, unique=True)
points = db.IntField(default=0)
date_created = db.DateTimeField(required=True)
def generate_referral_code():
return ''.join(random.choices(string.ascii_letters + string.digits, k=8))
@app.route('/', methods=['GET'])
def home():
return app.send_static_file('index.html')
@app.route('/success/<referral_code>', methods=['GET'])
def success(referral_code):
return render_template('success.html', referral_code=referral_code)
def increase_points(referral_code, points_to_add):
logging.debug(f"Attempting to increase points for referral_code: {referral_code}")
user = User.objects(referral_code=referral_code).first()
with open('readme1.txt', 'w') as f:
f.write('Create a new text file!')
if user:
new_points = user.points + points_to_add
with open('readme2.txt', 'w') as f:
f.write('Create a new text file!')
print("Hello World!")
db.user.update_one({"referral_code": referral_code},
{"$set": {"points": new_points}})
logging.debug(f"Update completed.")
else:
logging.debug(f"No user found with referral_code: {referral_code}")
@app.route('/submit', methods=['POST'])
def submit():
if request.method == 'POST':
email = request.form['email']
referral_code_used = request.form.get('referral_code')
existing_user = User.objects(email=email).first()
if existing_user:
flash('Email already registered.')
return redirect(url_for('home'))
if referral_code_used:
logging.debug(f"Referral code used during registration: {referral_code_used}")
increase_points(referral_code_used, points_to_add=1)
new_user = User(
email=email,
referral_code=generate_referral_code(),
date_created=datetime.utcnow()
)
new_user.save()
flash('Successfully registered!')
return redirect(url_for('success', referral_code=new_user.referral_code))
@app.route('/users', methods=['GET'])
def users_list():
users = User.objects() # Retrieve all users from MongoDB
users_data = "<h1>All Users</h1><ul>"
for user in users:
users_data += f"<li>{user.email} - Points: {user.points} - Referral Code: {user.referral_code}</li>"
users_data += "</ul>"
return users_data
if __name__ == "__main__":
app.run(debug=True)