Advertisement
Guest User

Untitled

a guest
Aug 1st, 2017
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.57 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.shortcuts import render,redirect
  4. import os
  5. from Demoapp.forms import SignUpForm, LoginForm, PostForm, LikeForm, CommentForm, CategoryForm, SearchUserForm, UpvoteForm
  6. from Demoapp.models import UserModel, SessionToken, PostModel, LikeModel, CommentModel, CategoryModel, UpvoteModel
  7. from datetime import timedelta
  8. from django.utils import timezone
  9. from datetime import datetime
  10. from Django_Project.settings import BASE_DIR
  11. from django.contrib.auth.hashers import make_password,check_password
  12. from django.http import HttpResponseRedirect
  13. from django.contrib.auth import logout
  14. #from clarifai import rest
  15. from clarifai.rest import ClarifaiApp
  16. #using clarifai to categorizing Images According To Different Category
  17. import smtplib
  18. #import email.utils
  19.  
  20. #from email.mime.text import MIMEText
  21. #smtplib is used to send email to a particular user who has performed certain actions(like post ,like etc)
  22. from constants import constant, CLARIFAI_API_KEY
  23. #from enum import Enum
  24.  
  25. #all contants are stored in it
  26. import ctypes
  27. import tkMessageBox
  28. from imgurpython import ImgurClient
  29. #(Imgur Saves THe IMage TO cloud using Clent id and client secret)
  30. client_id = '50b7d2b49057d21'
  31. client_secret = 'bcfb26bd61078f458bc58d45ad80416c8dc0e6e2'
  32.  
  33.  
  34.  
  35. # Create your views here.
  36. #The signup_view file is created to signup the Instagram Clone using username,name,email,and,password
  37. def signup_view(request) : #sigup here
  38. #Business Logic starts here
  39.  
  40. if request.method=='GET' : #IF GET REQUEST IS RECIEVED THEN DISPLAY THE SIGNUP FORM
  41.  
  42. form = SignUpForm()
  43.  
  44. elif request.method=='POST' : #for post request
  45. form = SignUpForm(request.POST)
  46. if form.is_valid() : #Checks While Valid Entries Is Performed Or Not
  47. if len(form.cleaned_data['username']) < 4 or len(form.cleaned_data['password']) < 5: #username at least 4 character and password at least 5 characters
  48. ctypes.windll.user32.MessageBoxW(0, u" Kindly re-enter username or password!min(4)usename and 5 character for password",
  49. u"INSUFFICIENT CHARACTERS.", 0)
  50.  
  51. else :
  52. username=form.cleaned_data['username']
  53. email=form.cleaned_data['email']
  54. name=form.cleaned_data['name']
  55. password=form.cleaned_data['password']
  56. #here above cleaned_data is used so that data could be extracted in safe manner,checks SQL injections
  57. #following code inserts data into database
  58.  
  59. new_user=UserModel(name=name,password=make_password(password),username=username,email=email)
  60. new_user.save() #finally saves the data in database
  61.  
  62.  
  63. #sending welcome Email To User That Have Signup Successfully
  64. message = "Welcome!! To Creating Your Account At p2p marketplace Managed by vikas raj.You Have " \
  65. "Successfully Registered.It is correct place for marketing Your product.We Are Happy To Get You" \
  66. "as one of our member "
  67. server = smtplib.SMTP('smtp.gmail.com',587) #port 465 or 587
  68. server.starttls()
  69. server.login('vikasrajuniversity@gmail.com',constant)
  70. server.sendmail('vikasrajuniversity@gmail.com',email,message)
  71. # WOW!!!SUCCESSFULLY SEND EMAIL TO THE USER WHO HAS SIGNUP.USER CAN CHECK INBOX OR SPAM
  72. # THIS IS ACCURATLY WORKING
  73. ctypes.windll.user32.MessageBoxW(0, u"You have successfully signed up.",
  74. u"Congratulations!", 0)
  75. #(showing message to user for successfully signing up)
  76. response = redirect('/feed/')
  77. return response
  78.  
  79.  
  80. return render(request, 'signup.html',{'form': form})
  81.  
  82.  
  83.  
  84. # The login_view function is created to login the Instagram Clone using username and password
  85. def login_view(request) :
  86. response_data = {}
  87. if request.method == 'GET' :#display form
  88. template='login.html' #it will redirect to login page
  89. form = LoginForm() #object
  90.  
  91.  
  92. elif request.method =='POST' :
  93. form = LoginForm(request.POST)
  94. if form.is_valid() : #checks whether entriesd in form is valid or not
  95. username=form.cleaned_data['username'] #extracting username and password in secure way
  96. password=form.cleaned_data['password'] #which was entered by user in login form
  97. #check user exists in database or not
  98. user=UserModel.objects.filter(username=username).first() #reads data from database
  99. #Above SELECT * from user model where username=username
  100. #This is SQL Querie for above statement
  101.  
  102. if user : #checks whether user exist in database or not
  103. #comparison of password here
  104. #comparison sof password here
  105. if check_password(password,user.password) :
  106. #login successful here
  107.  
  108. new_token = SessionToken(user=user)
  109. new_token.create_token()
  110. new_token.save()
  111. #response = redirect('feed/')
  112. response=redirect('/feed/')
  113. response.set_cookie(key='session_token', value = new_token.session_token)
  114. #template = 'login_success.html'
  115. return response
  116. #return render(request,template,{'form':form},response)
  117. else:
  118. #password is incorrects
  119. ctypes.windll.user32.MessageBoxW(0, u"Invalid Password!!!kindly enter correct password", u"Error", 0)
  120. response_data['message'] = 'Please try again!'
  121. redirect('/login/')
  122. else:
  123. ctypes.windll.user32.MessageBoxW(0, u"Invalid Username !!enter valid name", u"Error", 0)
  124. redirect('/login/')
  125. response_data['form'] = form
  126. return render(request,template,{'form':form})
  127.  
  128.  
  129. #The feed_view function is created to feed the form after signup an login function Completed
  130. def feed_view(request) :
  131. user = check_validation(request)
  132. if user:
  133.  
  134. posts = PostModel.objects.all().order_by('-created_on')
  135.  
  136. for post in posts:
  137. existing_like = LikeModel.objects.filter(post_id=post.id, user=user).first()
  138. if existing_like:
  139. post.has_liked = True
  140.  
  141. comments = CommentModel.objects.filter(post_id=post.id)
  142. #Logic for upvoting
  143. for comment in comments:
  144. existing_upvote = UpvoteModel.objects.filter(user=user, comment_id=comment.id).first()
  145. if existing_upvote:
  146. comment.has_upvoted = True
  147.  
  148. return render(request, 'feeds.html', {'posts': posts,'comments':comments})
  149. else:
  150.  
  151. return redirect('/login/')
  152.  
  153. # The check_validation is created for check and maintan validation
  154. def check_validation(request):
  155. if request.COOKIES.get('session_token'):
  156. session = SessionToken.objects.filter(session_token=request.COOKIES.get('session_token')).first() #if session has already created on server
  157. if session:
  158. time_to_live = session.created_on + timedelta(days=1)
  159. if time_to_live > timezone.now():
  160. return session.user
  161. else:
  162. return None
  163.  
  164.  
  165. # The add_category funcrion is created to categories images seprately
  166. def add_category(post):
  167. app = ClarifaiApp(api_key=CLARIFAI_API_KEY)
  168.  
  169. # Logo model
  170.  
  171. model = app.models.get('general-v1.3')
  172. response = model.predict_by_url(url=post.image_url)
  173.  
  174. if response["status"]["code"] == 10000:
  175. if response["outputs"]:
  176. if response["outputs"][0]["data"]:
  177. if response["outputs"][0]["data"]["concepts"]:
  178. for index in range(0, len(response["outputs"][0]["data"]["concepts"])):
  179. category = CategoryModel(post=post, category_text = response["outputs"][0]["data"]["concepts"][index]["name"])
  180. category.save()
  181. else:
  182. print "No concepts list error."
  183. else:
  184. print "No data list error."
  185. else:
  186. print "No output lists error."
  187. else:
  188. print "Response code error."
  189.  
  190.  
  191. # The post_view function is created to post an image on Instagram Clone
  192. def post_view(request) :
  193. user = check_validation(request)
  194.  
  195. if user :
  196. if request.method == 'POST' :
  197. form = PostForm(request.POST, request.FILES)
  198. if form.is_valid() :
  199. image = form.cleaned_data.get('image')
  200. caption = form.cleaned_data.get('caption')
  201. post = PostModel(user=user, image=image, caption=caption)
  202. post.save()
  203.  
  204. path = str(BASE_DIR +"//"+ post.image.url)
  205. #Logic for cloud storage of image
  206. client = ImgurClient('50b7d2b49057d21', 'bcfb26bd61078f458bc58d45ad80416c8dc0e6e2')
  207. post.image_url = client.upload_from_path(path, anon=True)['link']
  208. post.save()
  209.  
  210. add_category(post) #Calling Add category for which furture contact to clarifai
  211. app = ClarifaiApp(api_key=CLARIFAI_API_KEY)
  212. model = app.models.get('general-v1.3') # notify model which we are going to use from clarifai
  213. response = model.predict_by_url(url=post.image_url) # pass the url of current image
  214. category = response["outputs"][0]["data"]["concepts"][0][
  215. "name"] # abstarct category name from json response
  216. post.category = category # pass value to postModel
  217. post.save() #save in category field of the POSTMODEL
  218. ctypes.windll.user32.MessageBoxW(0, u"Your new post is ready.",
  219. u"Well done!", 0)
  220.  
  221. return redirect('/feed/')
  222. else :
  223. ctypes.windll.user32.MessageBoxW(0, u"Kindly re-check.",
  224. u"Ooops!", 0)
  225.  
  226. else :
  227. form = PostForm()
  228. return render(request, 'posts.html', {'form' : form})
  229.  
  230. else :
  231. return redirect('/login/')
  232.  
  233. # The search_view function is created to search request and responces
  234. def search_view(request):
  235. user=check_validation(request)
  236. if user and request.method=="GET":
  237. form=SearchUserForm()
  238. return render(request, 'search.html', {'form': form})
  239. elif request.method == "POST":
  240. form = SearchUserForm(data=request.POST)
  241. if form.is_valid():
  242. username = form.cleaned_data.get('username')
  243. posts = PostModel.objects.filter(user__username=username)
  244. return render(request, 'feeds.html', {'posts': posts})
  245. return redirect('/login/')
  246.  
  247.  
  248.  
  249. def search_user_view(request,username):
  250. posts = PostModel.objects.filter(user__username=username)
  251. return render(request, 'feeds.html', {'posts': posts})
  252.  
  253.  
  254.  
  255. #The like_view function is created to like a user post
  256. def like_view(request):
  257. user = check_validation(request)
  258. if user and request.method == 'POST':
  259. form = LikeForm(request.POST)
  260. if form.is_valid():
  261. post_id = form.cleaned_data.get('post').id
  262.  
  263. existing_like = LikeModel.objects.filter(post_id=post_id, user=user).first()
  264. if not existing_like:
  265. like = LikeModel.objects.create(post_id=post_id, user=user)
  266. ctypes.windll.user32.MessageBoxW(0, u"Keep scrolling for more.",
  267. u"Liked!", 0)
  268. server = smtplib.SMTP('smtp.gmail.com', 587)
  269. server.starttls()
  270. to_email = like.post.user.email
  271. message = "You have a new like on your post posted on instaclone.WEll done keep posting to get more popular"
  272. server.login('vikasrajuniversity@gmail.com', constant)
  273. server.sendmail('vikasrajuniversity@gmail.com', to_email, message)
  274.  
  275. else:
  276. existing_like.delete()
  277. return redirect('/feed/')
  278. else:
  279. return redirect('/login/')
  280.  
  281. # The comment_view function is created to comment on a particular user post
  282. def comment_view(request):
  283. user = check_validation(request)
  284. if user and request.method == 'POST':
  285. form = CommentForm(request.POST)
  286. if form.is_valid():
  287. post_id = form.cleaned_data.get('post').id
  288. comment_text = form.cleaned_data.get('comment_text')
  289. comment = CommentModel.objects.create(user=user, post_id=post_id, comment_text=comment_text)
  290. comment.save()
  291.  
  292. ctypes.windll.user32.MessageBoxW(0, u"Keep scrolling for more.",
  293. u"Successfully Comment added!", 0)
  294. to_mail = comment.post.user.email
  295. text_message = "hi!!!you have one new comment on your post.Keep posting To get more comments" \
  296. "Thank You TEAM::ACADVIEW"
  297. server = smtplib.SMTP('smtp.gmail.com', 587)
  298. server.starttls()
  299. server.login('vikasrajuniversity@gmail.com', constant)
  300. server.sendmail('vikasrajuniversity@gmail.com', to_mail, text_message)
  301. return redirect('/feed/')
  302. else:
  303. return redirect('/feed/')
  304. else:
  305. return redirect('/login')
  306.  
  307. #view category_view function is created to view post of particular category
  308. def category_view(request):
  309. user = check_validation(request)
  310.  
  311. if user and request.method=="GET":
  312. posts = PostModel.objects.all().order_by('created_on') #pass all images data when categories are to be displayed
  313. return render(request, 'categories.html', {'posts': posts})
  314. elif request.method=="POST":
  315. form=CategoryForm(request.POST)
  316. if form.is_valid():
  317. category = form.cleaned_data.get('category')
  318. posts = PostModel.objects.filter(category=category) #select only those post which have same category as selected by user
  319. return render(request, 'feeds.html', {'posts': posts})
  320. else:
  321. return redirect('/feed/')
  322.  
  323. return redirect('/login/')
  324.  
  325. # the view function is created to comment on instaclone post
  326. def upvote_view(request):
  327. user = check_validation(request)
  328. if request.method == 'POST':
  329. form = UpvoteForm(request.POST)
  330. if form.is_valid():
  331. comment_id = form.cleaned_data.get('comment').id
  332. existing_upvote = UpvoteModel.objects.filter(comment_id=comment_id, user=user).first()
  333. if not existing_upvote: # if comment is not upvoted by current user
  334. UpvoteModel.objects.create(comment_id=comment_id, user=user)
  335. else:
  336. existing_upvote.delete() # devote comment
  337. return redirect('/feed/')
  338. else:
  339. return redirect('/login/')
  340. else:
  341. return redirect('/login/')
  342. #return redirect('/index/')
  343.  
  344. # Ai the end Implemented the logout Funcnality
  345. def logout_view(request):
  346. request.session.modified = True
  347. response = redirect("/login/")
  348.  
  349. ctypes.windll.user32.MessageBoxW(0, u"You've been logged out successfully!",
  350. u"Thank you!", 0)
  351.  
  352. response.delete_cookie(key="session_token")
  353. return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement