Я новичок во флеше, API и программировании в целом, поэтому, пожалуйста, потерпите меня. Это мой первый практический проект, и он небольшой, но я хочу его завершить.
Итак, у меня есть веб-сайт, который принимает пользовательский ввод, помимо прочего, также выбор времени, на основании которого программа с использованием календаря GoogleAPI должен быть показан. Сама форма работает так же, как и часть повестки дня, если время вводится вручную, но я не могу понять, как извлечь выбранное время из формы.
Это часть регистрации, где время вводитсяпользователь:
import os
import secrets
from PIL import Image
from flask import render_template, url_for, flash, redirect, request
from sms_agenda import app, db, bcrypt, mail
from sms_agenda.forms import (RegistrationForm, LoginForm, UpdateAccountForm,
RequestResetForm, ResetPasswordForm)
from sms_agenda.models import User, Post
from flask_login import login_user, logout_user, current_user, login_required
from flask_mail import Message
@app.route("/register", methods=['GET', 'POST'])
def register():
if current_user.is_authenticated:
return redirect(url_for('home'))
form = RegistrationForm()
if form.validate_on_submit():
hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
user = User(username=form.username.data, email=form.email.data,
phone=form.phone.data, time=form.time.data, password=hashed_password)
db.session.add(user)
db.session.commit()
flash(f'Your account has been created, you can now log in', 'success')
return redirect(url_for('login'))
return render_template('register.html', title='Register', form=form)
И это часть API в другом файле:
from __future__ import print_function
from twilio.rest import Client
import datetime
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from sms_agenda.routes import time
chosen_int_time = ... # The time needs to be entered here
amend_time = 24 - chosen_int_time
now = datetime.datetime.utcnow()
display_time = now.replace(hour=chosen_int_time)
from_time = (display_time + (datetime.timedelta(hours=amend_time))).isoformat() + 'Z'
to_time = (display_time + (datetime.timedelta(hours=(amend_time + 24)))).isoformat() + 'Z'
events_result = service.events().list(calendarId='primary', timeMin=from_time,
timeMax=to_time, singleEvents=True,
orderBy='startTime').execute()
events = events_result.get('items', [])
date = datetime.date.today()
tomorrow = str(date + datetime.timedelta(days=1))
agenda = ''
if not events:
print('No upcoming events found.')
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
event = start[11:16] + ' - ' + event['summary']
agenda += (f"{event} \n")
return (f"Your agenda for " + tomorrow + '\n' + agenda)
Я пробовал разные вещи, выбрасывая различные ошибки, но, похоже, проблема связана с контекстом запроса.
Одна вещь, которую я пытался добавить, это ниже def register():
def time():
with app.app_context():
form = RegistrationForm()
if form.validate_on_submit():
time_chosen = User.query.filter_by(email=form.time.data).first()
return time_chosen
А затем использовать time()
в chosen_int_time
.
К сожалению, я не могуотладить это через официальную документацию.
РЕДАКТИРОВАТЬ: Извиняюсь, что не опубликовал весь код, я не знал, что невозможно дать какой-либо разумный совет таким образом.
Я обнаружил, чтопроблема не в том, чтобы были настроены какие-либо маршруты для действий, которые я хотел предпринять, я представлял, что вы можете просто вызывать функции без этого. Ну, может быть, вы можете ...
В любом случае, я добавил маршруты и внес небольшие изменения в функции, и теперь это работает. Но все еще далеко.