

@team_required
@login_required
def team_join(request):
    team = request.team
    state = team.state_for(request.user)
    if ((team.manager_access == Team.MEMBER_ACCESS_INVITATION) and (state is None) and (not request.user.is_staff)):
        raise Http404()
    if (team.can_join(request.user) and (request.method == 'POST')):
        (membership, created) = Membership.objects.get_or_create(team=team, user=request.user)
        membership.role = Membership.ROLE_MEMBER
        membership.state = Membership.STATE_AUTO_JOINED
        membership.save()
        messages.success(request, MESSAGE_STRINGS['joined-team'])
    return redirect('team_detail', slug=team.slug)

dataset/ETHPy150Open pinax/pinax-teams/pinax/teams/views.py team_join/original