私はセロリを使用しており、「root」ユーザーではなく、リクエストを送信したユーザーに代わってセッションを推進したいと考えています。たとえば、基本的なタスクは次のようになります(非常に工夫された例)
@task
def process_checklist(**kwargs):
log = process_checklist.get_logger()
document = kwargs.get('document', None)
company = kwargs.get('company', None)
user = kwargs.get('user', None)
object = Book.object.get_or_create(name=kwargs.get('name'))
これを行うことにはトレードオフがありますが、実際にビューを使用してこれを行う方がはるかに有益だと思います。これは、テスト方法と非常によく似ています。実際には、これはデータのバッチアップロードに使用され、各行は事実上CreateView。
client = Client()
client.login(user='foo', password='bar')
client.post(reverse('create_book_view', data=**kwargs))
しかし、(可能であれば)django.test.client Clientクラスを実際に使用して、パスワードを知らずにユーザーにログインし、ユーザーのビューに入力するための良い方法を考えることはできません。私はこれを考えましたが、もっと良い方法があると確信していますか?
これが私が思いついたものですか?
class AxisClient(Client):
# The admin account is created by us. Once that is done everything should be tested through
# the system.
def login_user(self, username):
"""
Sets the Factory to appear as if it has successfully logged into a site.
Returns True if login is possible; False if the provided credentials
are incorrect, or the user is inactive, or if the sessions framework is
not available.
"""
user = User.objects.get(username=username)
user.backend = None
if user and user.is_active \
and 'django.contrib.sessions' in settings.INSTALLED_APPS:
engine = import_module(settings.SESSION_ENGINE)
# Create a fake request to store login details.
request = HttpRequest()
if self.session:
request.session = self.session
else:
request.session = engine.SessionStore()
login(request, user)
# Save the session values.
request.session.save()
# Set the cookie to represent the session.
session_cookie = settings.SESSION_COOKIE_NAME
self.cookies[session_cookie] = request.session.session_key
cookie_data = {
'max-age': None,
'path': '/',
'domain': settings.SESSION_COOKIE_DOMAIN,
'secure': settings.SESSION_COOKIE_SECURE or None,
'expires': None,
}
self.cookies[session_cookie].update(cookie_data)
return True
else:
return False