2017-04-06 1 views
-2

저는 현재 heroku에서 호스팅되는 뷰와 함께 부트 스트랩과 다양한 플라스크 플러그인을 사용하여 Flask에 응용 프로그램을 설계하고 있습니다. 이 앱은 본질적으로 현대적인 펀치 카드입니다. 직원들은 로그인하고, 근무 시간을 시계와 바깥으로 돌아보고 지난 주, 지난 몇 달 동안 일한 것을보고 그 시간 동안 얼마나 많은 돈을 벌었는지 추정 할 수 있습니다. dB는 텍스트 파일을 통해 관리자에게 내보낼 수 있습니다.Python Flask SQl Alchemy/SQLite 데이터베이스 디자인

나는 연금술을 사용하여 만든 데이터베이스에 사용자 입력을 저장하는 로그인 및 등록 기능을 코딩 할 수있었습니다.

그러나 응용 프로그램의 기본 기능은 내가 고심하고있는 곳입니다. 데이터베이스가별로 좋지 않습니다. 각 사용자는 로그인 한 후 시계를 사용하여 작업 변경/시계 아웃을 시작하고 전일 근무 보고서를 볼 수 있어야합니다.

사용자가 로그인하여 시계를 넣거나 껐다가 시간 객체를 만들어 해당 사용자 나 관리자 이외에 아무도없는 사용자에게 특정 테이블에 저장하도록하는 방법이없는 것 같습니다. 볼 수 있습니다?

내일 코드를 먼저 게시 할 예정입니다 만 요약 내 문제는 다음과 같습니다

내가 로그인 한 사용자를 확인하는 방법을 작동하지 수는 그에게 관련 데이터를 생성/자신이 될 수 없습니다 다른 사용자가 볼 수 있습니다 (동료가 자신의 시간을 볼 필요가없는 것은 분명합니다). 나는 FK를 사용자 ID로 설정하려고 시도했지만 아무런 소용이 없다. 테이블을 연결하는 것처럼 보인다.

저는 heroku에 배포 할 때 내 dB가 잠재적으로 문제를 일으키고 대신 postgresql을 사용하기 때문에 SQLite를 사용합니다.

답변

0

사용자가 시계 입력 및 시계 아웃 할 때 ID 필드 (기본 키), 작업 필드 (시계 입력 또는 출력) 및 날짜 시간 필드를 사용하여 다른 테이블을 만듭니다. user_id와 logging_id 두 개의 열이있는 사용자 및 로깅 테이블에 대해 보조 테이블이 될 다른 테이블을 작성하십시오. users.id와 logging.id에 각각 외래 키가 있습니다.

플라스크 -sqlalchemy에서 수행하는 방법을 알고있는대로 매핑해야합니다 ("보조"테이블의 경우 클래스를 만들지 말고 db.Table 함수를 사용해야 함). 관련이없는 example을 봅니다. 예제에서 'roles_users'처럼 'logging_users'보조 테이블을 매핑 할 필요)

그런 다음 당신은 클래스 사이의 관계를 만들어야합니다. 당신의 사용자 클래스에 모든 사용자 인스턴스 이제

logging = db.relationship ('Logging', secondary=logging_users, 
           backref=db.backref('users', lazy='dynamic')) 

를 추가 지정된 사용자와 연관된 모든 로깅 인스턴스를 포함하는 목록 인 연관된 'logging'필드를 갖습니다. 모든 목록 요소와 마찬가지로 로깅 인스턴스를 로깅 필드에 추가하여 사용자에게 로깅 인스턴스를 추가 할 수 있습니다. 예 :

log = Logging(action='enter', datetime='2017-04-04T08:14:23') 
current_user.append(log) 

나는 희망한다!

0

사용자 세션을 관리하려면 세션을 사용해야합니다. 당신이 볼 수있는

data = User.query.filter(User.username == session['username']).first() 
user_username = data[0] 
user_password = data[1] 
user_logged_in = data[2] 
user_logged_in = data[3] 

은 "데이터"개체 만 정의 할 수 있습니다 세션에서 사용자가 검색된다

class User: 
    __tablename__ = 'user' 
    username = db.Column(db.String) 
    password = db.Column(db.String) 
    logged_in = db.Column(db.DateTime) 
    logged_out = db.Column(db.DateTime) 

당신의 변수는 다음과 같이 표시됩니다 또한 다음과 같은 데이터베이스 모델을 생각해 볼 수 있습니다 사용하는 프레임 워크 또는 로그인 양식에서 POST 데이터를 가져올 때 직접 작성해야합니다.

희망이 도움이되었습니다.