Commit e9676925 by Owo Sugiana

Kali pertama

0 parents
0.1 26-11-2020
--------------
- Kali pertama
Pencatatan Kegiatan User pada Pyramid
=====================================
Ini merupakan modul Pyramid untuk mencatat kegiatan user. Silakan buat tabelnya
terlebih dahulu::
~/env/bin/initialize_user_log_db test.ini
Sebelum menggunakannya pastikan variabel ``request`` memiliki ``dbsession``.
Perhatikan contoh file ``models/__init__.py`` berikut ini::
from sqlalchemy import engine_from_config
from sqlalchemy.orm import sessionmaker
from zope.sqlalchemy import register
def get_tm_session(session_factory, transaction_manager):
dbsession = session_factory()
register(dbsession, transaction_manager=transaction_manager)
return dbsession
def includeme(config):
settings = config.get_settings()
settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
config.include('pyramid_tm')
config.include('pyramid_retry')
engine = engine_from_config(settings, 'sqlalchemy.')
factory = sessionmaker(bind=engine)
config.registry['dbsession_factory'] = factory
config.add_request_method(
lambda r: get_tm_session(factory, r.tm),
reify=True)
Pastikan juga variabel ``request`` memiliki *row object* ``user`` seperti pada
contoh file ``security.py`` berikut ini::
from .models.ziggurat import User
def get_user(request):
uid = request.authenticated_userid
if uid:
q = request.dbsession.query(User).filter_by(id=uid)
return q.first()
def includeme(config):
config.add_request_method(get_user, 'user', reify=True)
Contoh penggunaan dalam views::
def view_add(request):
...
...
data = ...
request.log(f'tambah {data}')
return ...
Selamat mencoba
from .models import Log
def save_log(request, keterangan):
row = Log(
user_id=request.user.id,
ip=request.client_addr,
user_agent=request.user_agent,
url=request.url,
keterangan=keterangan)
request.dbsession.add(row)
def includeme(config):
config.add_request_method(save_log, 'log')
from sqlalchemy import (
Column,
Integer,
String,
DateTime,
Text,
func,
)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Log(Base):
__tablename__ = 'log_user'
id = Column(Integer, primary_key=True)
tgl = Column(
DateTime(timezone=True), nullable=False, server_default=func.now())
user_id = Column(Integer, nullable=False)
ip = Column(String(15), nullable=False)
user_agent = Column(Text, nullable=False)
url = Column(Text, nullable=False)
keterangan = Column(Text, nullable=False)
import sys
from sqlalchemy import engine_from_config
from pyramid.paster import get_appsettings
from ..models import Base
def main(argv=sys.argv[1:]):
conf_file = argv[0]
settings = get_appsettings(conf_file)
engine = engine_from_config(settings, 'sqlalchemy.')
engine.echo = True
Base.metadata.create_all(engine)
import os
import sys
import subprocess
from setuptools import (
setup,
find_packages,
)
here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.rst')) as f:
README = f.read()
with open(os.path.join(here, 'CHANGES.txt')) as f:
CHANGES = f.read()
line = CHANGES.splitlines()[0]
version = line.split()[0]
requires = [
'sqlalchemy',
'pyramid',
]
setup(
name='pyramid-linkaja',
version=version,
description='Modul Pyramid untuk menyimpan kegiatan user',
long_description=README + '\n\n' + CHANGES,
classifiers=[
'Programming Language :: Python :: 3.6',
'Framework :: Pyramid',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: WSGI :: Application',
],
author='Owo Sugiana',
author_email='sugiana@gmail.com',
url='https://git.opensipkd.com/sugiana/pyramid-linkaja',
keywords='web pyramid pylons',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=requires,
entry_points={
'console_scripts': [
'initialize_user_log_db = '
'pyramid_user_log.scripts.initialize_db:main',
]
},
)
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!