Files
mashangban/models.py

54 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
import pytz
db = SQLAlchemy()
def now_shanghai():
"""返回上海时区UTC+8的当前时间"""
return datetime.now(pytz.timezone('Asia/Shanghai'))
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password_hash = db.Column(db.String(200))
role = db.Column(db.String(20), nullable=False, default='user')
contact = db.Column(db.String(100))
dingtalk_userid = db.Column(db.String(100), unique=True)
dingtalk_name = db.Column(db.String(100))
dingtalk_dept = db.Column(db.String(200))
created_at = db.Column(db.DateTime, default=now_shanghai)
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
if not self.password_hash:
return False
return check_password_hash(self.password_hash, password)
def is_admin(self):
return self.role == 'admin'
class Demand(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
content = db.Column(db.Text, nullable=False)
branch = db.Column(db.String(50), nullable=False)
contact = db.Column(db.String(100), nullable=False)
is_public = db.Column(db.Boolean, default=True)
answer = db.Column(db.Text)
answered_at = db.Column(db.DateTime)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
created_at = db.Column(db.DateTime, default=now_shanghai)
updated_at = db.Column(db.DateTime, default=now_shanghai)
user = db.relationship('User', backref=db.backref('demands', lazy=True))
def can_edit(self, current_user):
if current_user.is_admin():
return True
return self.user_id == current_user.id