def skip_always(request, story_id):
s = get_object_or_404(Story.objects, id=story_id)
u = request.user
if s.is_finished:
return HttpResponseBadRequest("Story already finished")
if not s.participates_in(u):
raise PermissionDenied
try:
s.set_always_skip(u)
messages.success(request, u"Du wirst nun automatisch übersprungen bei „%s“." % s.title)
except NotEnoughActivePlayers as e:
messages.success(request, u"Zuwenig aktive Spieler, als dass du überspringen kannst bei „%s“." % s.title)
return redirect('overview')
python类objects()的实例源码
def unskip_always(request, story_id):
s = get_object_or_404(Story.objects, id=story_id)
u = request.user
if not s.participates_in(u):
raise PermissionDenied
if s.is_finished:
return HttpResponseBadRequest("Story already finished")
messages.success(request, u"Du schreibst wieder aktiv mit bei „%s“." % s.title)
s.unset_always_skip(u)
return redirect('overview')
def show_story(request, story_id):
s = get_object_or_404(Story.objects, id=story_id)
if s.is_finished:
if not s.participates_in(request.user) and not s.is_public:
raise PermissionDenied
anonym = not s.participates_in(request.user)
if request.user.is_authenticated() and not request.user in s.read_by.all():
s.read_by.add(request.user)
context = {
'story': s,
'anonymized' : anonym,
'has_upvoted' : s.has_upvoted(request.user),
'upvote_count' : s.upvote_count(),
}
return render(request, 'umklapp/show_story.html', context)
else:
# unfinished business
assert not s.is_finished
if not s.participates_in(request.user):
raise PermissionDenied
form = None
t = get_object_or_404(s.tellers, user=request.user)
if s.whose_turn == t.position:
# only show form if its the user's turn
form = ExtendStoryForm()
context = {
'story': s,
'form': form,
'always_skip' : s.does_always_skip(request.user),
}
return render(request, 'umklapp/extend_story.html', context)
def update_profile(request):
form = UserUpdateForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
messages.success(request, u"Daten gespeichert")
return redirect('user_profile')
else:
context = {
'form': form,
'sentences_written': StoryPart.objects.filter(teller__user=request.user).count(),
'participated_in': Teller.objects.filter(user=request.user).count(),
'stories_started': Story.objects.filter(started_by=request.user).count(),
}
return render(request, 'umklapp/profile.html', context)
def upvote_story(request, story_id):
s = get_object_or_404(Story.objects, id=story_id)
if not s.is_finished:
return HttpResponseBadRequest("Story not finished yet")
s.upvote_story(request.user)
return redirect('show_story', story_id=s.id)
def downvote_story(request, story_id):
s = get_object_or_404(Story.objects, id=story_id)
if not s.is_finished:
return HttpResponseBadRequest("Story not finished yet")
s.downvote_story(request.user)
return redirect('show_story', story_id=s.id)
def downvote_storypart(request, storypart_id):
s = get_object_or_404(StoryPart.objects, id=storypart_id)
s.downvote(request.user)
return redirect('show_story', story_id=s.teller.corresponding_story.id)
def publish_story(request, story_id):
s = get_object_or_404(Story.objects, id=story_id)
if not s.is_finished:
return HttpResponseBadRequest("Story not finished yet")
if not s.started_by == request.user:
raise PermissionDenied
s.public(True)
return redirect('show_story', story_id=s.id)
def unpublish_story(request, story_id):
s = get_object_or_404(Story.objects, id=story_id)
if not s.is_finished:
return HttpResponseBadRequest("Story not finished yet")
if not s.started_by == request.user:
raise PermissionDenied
s.public(False)
return redirect('show_story', story_id=s.id)
def running_stories(request):
all_running_stories = Story.objects \
.filter(is_finished = False) \
.order_by('title', 'id') \
.annotate(parts_count = Count('tellers__storyparts',distinct=True)) \
.annotate(contrib_count = Count('tellers__storyparts__teller', distinct=True)) \
.annotate(active_count = Count('tellers', distinct=True)) \
.select_related('started_by') \
.prefetch_related('always_skip') \
.prefetch_related('tellers__user') \
if request.user.is_staff:
running_stories = all_running_stories
else:
running_stories = all_running_stories.filter(tellers__user=request.user)
user_activity = User.objects \
.filter(is_staff=False) \
.annotate(parts_written=Count('teller__storyparts')) \
.order_by('-parts_written', 'username')[:10]
context = {
'username': request.user.username,
'specialpowers': request.user.is_staff,
'running_stories': running_stories,
'finished_stories': finished_stories,
'user_activity': user_activity,
}
return render(request, 'umklapp/running.html', context)
def places(self, request, *args, **kwargs):
snippet = self.get_object()
lat = request.query_params['lat']
lng = request.query_params['lng']
userId = kwargs.get("id")
listPlaces = []
user = User.objects(id=userId).get()
userTypes = user.types
if not userTypes:
userTypes = ['594c36a033cbb6eed6f364e6','594c36b233cbb6eed6f364f2','594c368633cbb6eed6f364da','594c4a504362de3d8fae464f','5956fee67d2bf938c292e0bc']
places = Place.objects(Q(loc__near=[float(lat), float(lng)]))
for type in userTypes:
typeName = Category.objects(id=type).get().name
for place in places:
if typeName in place.types:
# Rating place according to twitter
twitterRating = len(Tweet.objects(text__contains= place.name))
place.twitter_rating = twitterRating
#Rating place according to user
userRating = RatedPlace.objects(Q(user_id__exact=userId) & Q(place_id__exact=place.id) )
print userId
print place.id
print userRating
if userRating:
rating = userRating.order_by('-id').first().rating
else:
rating = ''
place.user_rating = rating
#Adding places to list of recommended places
listPlaces.append(place)
# Sort the list according to twitter rated
listPlaces.sort(key=lambda x: x.twitter_rating, reverse=True)
# Sort the list according to user rated
listPlaces.sort(key=lambda x: x.user_rating, reverse=True)
serializer = PlaceSerializer(listPlaces[:20], many=True)
return Response(serializer.data)
########User choosen categories
def semester_view(request, study_program, main_profile=None, semester_number=None, save_location=True):
"""
Generates the link portal for a given semester in a given program code
"""
try:
semester = Semester.get(study_program, main_profile, semester_number)
except Semester.DoesNotExist:
if not main_profile and not semester_number:
# This URL might refer to a userpage instead
return studentpage(request, study_program)
raise Http404(
_('%s. semester ved hovedprofilen "%s" knyttet til studieprogrammet "%s" eksisterer ikke')
% ((semester_number or 'Et'), main_profile or 'felles', study_program)
)
if save_location:
# Save the deliberate change of location by user in the session, as the semester has been found successfully
request.session['semester_pk'] = semester.pk
request.session['study_program_slug'] = semester.study_program.slug
# Delete studentpage slug in order to prevent redirection to it
request.session['homepage'] = ''
if semester.main_profile:
request.session['main_profile_slug'] = semester.main_profile.slug
else:
request.session['main_profile_slug'] = ''
request.session['semester_number_slug'] = semester.number
request.session['homepage'] = '' # Delete saved homepage
# Where to send users if the semester has electives
electives_url = ''
if semester.has_electives:
if request.user.is_authenticated:
electives_url = request.user.options.get_admin_url()
else:
electives_url = '/accounts/dataporten/login'
return render(
request,
'semesterpage/courses.html',
{
'semester': semester,
'courses': semester.courses.all(),
'study_programs': StudyProgram.objects.filter(published=True),
'calendar_name': get_calendar_name(request),
'electives_url': electives_url,
'user': request.user,
'student_page': False,
},
)