Advertisement
Guest User

Untitled

a guest
Sep 10th, 2024
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.16 KB | None | 0 0
  1.  
  2. # associates/connection table between User and books
  3. user_books = db.Table(
  4.     "user_books",
  5.     db.metadata,
  6.     db.Column("users_id", ForeignKey("user.id"), primary_key=True),
  7.     db.Column("books_id", ForeignKey("books.id"), primary_key=True),
  8.  
  9.  
  10. class User(UserMixin, db.Model):
  11.    
  12.     Many to Many relationship between Books
  13.     '''
  14.  
  15.     __tablename__ = "user"
  16.  
  17.     id: Mapped[int] = mapped_column(primary_key=True)
  18.     # unique blocks the same username etc
  19.     # I can't have Nullable=False because it will make me add the columns everytime I add a column in User table    
  20.     username: Mapped[str] = mapped_column(String(80), index=True, unique=True)
  21.     hashed_password:  Mapped[str] = mapped_column(String(128))
  22.     email: Mapped[str] = mapped_column(String(700), index=True)
  23.     # Many relationship in a Many to Many relationship
  24.     rel_books: Mapped[List['Books’]] = relationship(secondary=user_books, back_populates="rel_user")
  25.  
  26.     def __repr__(self):
  27.         return '<User {}>'.format(self.username)
  28.  
  29. class Books(UserMixin, db.Model):
  30.     '''
  31.     Many to Many relationship between User
  32.  
  33.     '''
  34.     id: Mapped[int] = mapped_column(primary_key=True)
  35.     book_name: Mapped[str] = mapped_column(String(120)) # todo add unique=True for all users in a function
  36.     chapter_name: Mapped[Optional[str]] = mapped_column(String(120))
  37.     text: Mapped[Optional[str]] = mapped_column(String())
  38.     # connection between User table    
  39.     rel_user: Mapped[List["User"]] = relationship(secondary=user_books, back_populates="rel_books")
  40.  
  41.     def __repr__(self):
  42.         return '<books{}>'.format(self.text)
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59. class CreateBookForm(FlaskForm):
  60.     '''  
  61.     This is in the "/book/create" route.
  62.     The form are  book_name + book_chapters.
  63.     '''
  64.     book_name = StringField('book name', validators=[DataRequired("The book's name is required"),
  65.     submit = SubmitField('Submit')
  66.  
  67.  
  68.  
  69.  
  70. # create book
  71. @bookroute.route('/book/create', methods = ['GET', 'POST'])
  72. @login_required
  73. def create_book():
  74.  
  75.     form = CreatebookForm()
  76.     if form.validate_on_submit():
  77.         book_name_form = form.book_name.data
  78.         add_book_info = Books(book_name=book_name_form)
  79.         db.session.add(add_books_info)  
  80.         db.session.commit()          
  81.         flash('You have created a book successfully')
  82.         book_db = db.session.execute(db.select(Books).filter_by(book_name=book_name_form)).scalar_one_or_none()
  83.  
  84.         user_db = db.session.execute(db.select(User).filter_by(username=current_user.username)).scalar_one_or_none()
  85.         # create an user for a book. This connects the User and Books tables.
  86.         user_db.rel_books.append(add_book_info)
  87.         db.session.commit()
  88.        
  89.         book_db = db.session.execute(db.select(Books).filter_by(books_name=books_name_form)).scalar_one_or_none()
  90.         return redirect(url_for('bookroute.book', book_name_db=book_db.book_name))
  91.    
  92.     return render_template('create_book.html', title='create book’, form=form)
  93.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement