I'm building a student management system using Django.
In this code, The user search for a student with the encrypted query
name=StudentName&grade=Grade&id=StudentID&phone=ParentPhoneNumber&report=StudentReportNumber
,
that is extracted with the decrypt()
method.
Here are the two methods, the one which process the query and the one which shows the student profile.
No data from the query is saved to the database, but will be used to query the student details from the database.
def process_query(request):
# process the query from the url /?details={{ some hashes here }}
if request.method == 'GET':
raw_deatils = request.GET.get('details', None)
if raw_deatils:
details = decrypt(raw_deatils)
# decrypt is a function that is defined
# in the utils which takes the input string,
# check predeifined tests to test if valid.
# and return the decrypted query string else None
if details:
# now the decrypted message looks something like this.
# name=StudentName&grade=Grade&id=StudentID&phone=
# ParentPhoneNumber&report=StudentReportNumber
# some more processing pulls out value to variables,
name = details['StudentName'],
grade = details['Grade'],
student_id = details['StudentID'],
phone = details['ParentPhoneNumber'],
report = details['StudentReportNumber'],
search_token = details['token']
return redirect("somewhere I'm stuck")
else:
# encryption error, so redirect user to query page
else:
# error with submission redirect to query page
else:
# error with method. redirect to homepage.
def student_profile(request, name=None, grade=None, student_id=None):
# token to be added??
# some data processing to get marks,
# progress report. etc
if student_id:
context = {
'name' : name,
'grade' : grade,
'student_id' : student_id,
'report' : report,
'marks': {
# another dictionary of dictionaries
# as the product of the processing
},
'token' : token,
'attendance': {
# another dicitonary of stuff.
}
else:
context = {
'name' : name,
'grade' : grade,
}
return render(request, 'students/profile/single.html', context)
urls for this,
url(r'^go/$', 'students.views.process_query' name='process_view'),
url(r'^profile/(?P<name>[a-zA-Z]{1,20})/(?P<grade>[a-zA-Z]{1,20})$',
'students.views.student_profile', name='profile_view'),
whenever profile_view
is called without 'process_view', the name and grade only should be shown. If the profile_view
is initiated by the process_view
the context with attendance and marks should be rendered.
This works till the process_view
redirect, but I don't have a clue where should i redierect (or even should I redirect? stuck) and calling the profile_view
.
So the summary of the question,
How do I redirect from process_view
to profile_view
without losing data collected in process_view
to the profile_view
and render the content with the url of profile_view
?
I don't want the token
and student_id
to be shown on the url.
Thanks for any suggestions/help.
See Question&Answers more detail:
os