#### Repository https://github.com/python #### What Will I Learn? - Automation code - AJAX pagination in feeds #### Requirements - Basic Python - Install Python 3 - Install Flask #### Resources - Python - https://www.python.org/ - Flask - http://flask.pocoo.org/ - Peewee http://docs.peewee-orm.com/en/latest/ - Sqlitebrowser https://sqlitebrowser.org/ #### Difficulty Basic ### Tutorial Content Still in the same tutorial that is making social media applications using Flask, so far the features in our application are quite a lot, you can see the previous tutorials in the curriculum section. this is a tutorial series that will discuss in full about and the final process of this tutorial. the feature that I will add relates to technology. I will use ajax jquery to make the lazy load on large data. for more details, I will start this tutorial. ### Code automation Optimization is very necessary for programming and has become part of the programming recommended to developers. for that functions exist in an application also need optimization. If we have seen from the previous tutorials. There are some things that can be automated in the project in this tutorial. If reviewed in terms of code, there are several blocks of code that are repeated. the following is how to automate the code block: The repeater function can be seen in the picture below:  The picture above is an example of an inefficient function. When the development process is natural we do things like make repetitive functions, untidy code, and others. Well, usually in every development process there is a part called ***refactor***. For the above example it can be overcome by creating a function that can later be used repeatedly and more flexible like the following code: **app.py** ``` def getUser(username): try: return User.get(User.username == username) except User.DoesNotExist: abort(404) ``` I will create a new function with the name ```getUser ()``` the contents are exactly the same as the previous code block, the difference is I will return the results from the ``` return User.get(User.username == username) ``` function and now I use the function in other functions that are used to get the data of the user who is logged in. the following is the implementation. **app.py** ``` @app.route('/user/<username>/followers') def showFollowers(username): user = getUser(username) return render_template('userList.html', users = user.followers()) ```  and if the code automation is successful, there will be no errors in the application and the application is running as it should.  <br> - **Automation of error handles** There are a few more things that can be automated, namely how to handle errors when the user is not logged in but wants to access the user's page. Of course, there is an error and the error can be seen in the illustration below: .gif) Can be seen in the picture above when the application accesses the route ```http://127.0.0.1ambat000/user/User2 ``` there is an error that appears, now the task is to optimize the error from the frontend side like the following, This error appears on the profile.html page. because the is_following () function requires a temporary parameter in the backend not to pass parameters. here's the optimization method: **profile.html** ``` {% if user.username != session.username %} {% if session.logged_in %} {% if active_user.is_following(user)%} <form method="post" action="{{url_for('userUnfollow', username = user.username)}}"> <p class="bold">{{user.username}} <button class="btn btn-danger">-Unfollow</button></p> </form> {% else %} <form method="post" action="{{url_for('userFollow', username = user.username)}}"> <p class="bold">{{user.username}} <button class="btn btn-primary">+Follow</button></p> </form> {% endif %} {% endif %} {% endif %} ``` I will add one more filter using ```{% if session.logged_in%}``` this way I will only run the is_following function when the user is logged in and here are the results: .gif) We can see in the picture above, we have done error handling on the error. The next section will discuss ajax for database queries that will make the user experience more attractive to users. ### Ajax synchronization Broadly speaking, this application should use HTTP Request to access data from the database. It would be great if using **ajax** ***(Asynchronous JavaScript and XMLHTTP).*** I will practice this method to make the system protect the data so that it can make the system load more so that the user experience can be better. For the **AJAX** part, I will ask **Jquery** for help to make AJAX easier, import Ajax first in the project like the following, I use **CDN** to make it easier for the development process: **CDN:** ``` <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> ``` - **Use jquery to do AJAX (frontend)** Now I will start from the frontend to make an AJAX request. for that, I need to mark HTML elements so that I can use the **DOM** element. The following is index.html that we installed Jquery Ajax. **index.html** ``` {%extends "layout.html" %} {% block body %} <div class="jumbotron"> <h1 class="display-4">Welcome to homepage, I'm using base layout</h1> <p class="lead">Welcome to the social media application that uses flasks</p> <hr class="my-4"> <p>For new users you are required to register to use this application. please click register</p> <a class="btn btn-primary btn-lg" href="{{url_for('registerPage')}}" role="button">Register</a> </div> <h2 style="text-align: center;">Your feed</h2> <div id="tweets"> {%for message in messages%} <h4>{{message.content}} - by <a href="{{url_for('userProfile', username=message.user.username)}}">{{message.user.username}}</a></h4> <span style="font-size: 10px; font-style: italic;">{{message.published_at}}</span> {%endfor %} </div> <a href="#" id="btn_load" data-id=2>Load more..</a> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> $('#btn_load').on('click', function() { initPage = $(this).attr('data-id') // get attribute id $.get('/loadMore/'+initPage, function(res){ console.log(res) if($.isEmptyObject(res)) console.log('Empty !!') else $.each(res, function(key, item){ }) }) }) </script> {% endblock %} ``` - The focus is the button that has the ```$('#btn_load').on('click', function() { }``` function, then I will make a helper which is an additional attribute on the button ```<a href="#" id="btn_load" data-id=2>Load more..</a>```. The **data-id** will be the page marker that will be accessed. later the data id will increase automatically. I will define the **data-id** to the **initPage** variable ``` initPage = $(this).attr('data-id')```, I use ```$(this)``` to refer to the button element that is clicked. - Then now is the AJAX section. I will do AJAX on the endpoint loadMore ``` $.get('/loadMore/'+initPage, function(res){ }```. This time the AJAX request uses the get method and at that endpoint I pass the **initPage** parameter as a marker of ***pagination*** and before it gets too far I will do ```console.log(res)``` to see the data we have got from the endpoint. <br> - **Create a loadMore endpoint (backend)** The next step is to make an endpoint on the backend side. there is a new routing that will be created, namely routing **'/ loadMore'**, for more details, see the code below: **app.py** ``` @app.route('/loadMore/<int:pageNum>') def loadMore(pageNum): user = get_current_user() messages = {} for message in (Message.select() .where((Message.user << user.following()) | (Message.user == user.id) ) .order_by(Message.published_at.desc()) .paginate(pageNum, 3)): messages[message.id] = { 'content' : message.content, 'user' : message.user.username } return jsonify(messages) ``` - Need to know because this endpoint is used for the API so the return is in the form of JSON, to return data in JSON form, I will import a function that is jsonify ```from flask import jsonify```. - In this function, I will create parameters that will be defined in the form of integers ```/loadMore/<int:pageNum>```. So the parameter is **pageNum**. - To make pagination I can use the ```paginate()``` function, in this function there are two parameters ```paginate(pageNum, 3)```, the **first** parameter is the range of pagination and the **second** parameter is the amount of data that will be taken. - The results of the pagination query will first be looped and input into the new object ie **messages**. ``` messages[message.id] = { 'content' : message.content, 'user' : message.user.username }messages[message.id] = { 'content' : message.content, 'user' : message.user.username } ``` The data being looped is input into the key based on the post ID of the data ```messages[message.id]```, then the data is returned in JSON form by using **jsonify** ```return jsonify(messages)```. to test whether the results are the way we want I will run the application because in the frontend section I have provided ```console.log ()```, there should be a response displayed like the demonstration below: .gif) Now it can be seen in the console part of the response from the Request AJAX that was done when clicking the ***load more button ...*** on the frontend, this means that the application that we created is running well and the load more function can be used in the FLask application, just this tutorial hopefully it will be useful for you. thank you ### Curriculum [Make social media applications with Flask #1: Design database and initial structure, Following and follower functions]( https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-1-desaign-database-and-initial-structure-following-and-follower-functions-1547568096688) [Make social media applications with Flask #2: System routing and Templating, Make user register](https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-2-system-routing-and-templating-make-user-register-1547816234338) [Make social media applications with Flask #3: Register user and Store data in SQLite, Base Layout](https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-3-register-user-and-store-data-in-sqlite-base-layout-1548251533384) [Make social media applications with Flask #4: Login system and Use session to manage user data](https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-4-login-system-and-use-session-to-manage-user-data-1548429289119) [Make social media applications with Flask #5: Authentication during registration and User notification]( https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-5-authentication-during-registration-and-user-notification-1548686390863) [Make social media applications with Flask #6: View decorator and Post the first status](https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-6-view-decorator-and-post-the-first-status-1549029740369) [Make social media applications with Flask #7: The use of backref and Create profile features]( https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-7-the-use-of-backref-and-create-profile-features-1549339256879) [Make social media applications with Flask #8: Handle error and Make the system follow a user]( https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-8-handle-error-and-make-the-system-follow-a-user-1549792437933) [Make social media applications with Flask #9: Context processor and Unfollow system and Implement in the user interface]( https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-9-context-processor-and-unfollow-system-and-implement-in-the-user-interface-1549980987869) [Make social media applications with Flask #10: Stream tweets and Feeds for each user]( https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-10-stream-tweets-and-feeds-for-each-user-1550384814196) #### Proof of work done https://github.com/milleaduski/python-web-app
author | duski.harahap | ||||||
---|---|---|---|---|---|---|---|
permlink | make-social-media-applications-with-flask-13-automation-code-and-ajax-pagination-in-feeds-1551450458559 | ||||||
category | utopian-io | ||||||
json_metadata | {"app":"steeditor/0.1.2","format":"markdown","image":["https://ipfs.busy.org/ipfs/QmWf9aCC833UZbyZkwu2ZB5MFV3NwWsemrY9oSWxhiKvK8","https://ipfs.busy.org/ipfs/QmPs4nGZgDHpDjAXqTnDdAEpLGthFKQAZdk7JgLASPqmdW","https://ipfs.busy.org/ipfs/QmaAGgR8wm9PQCKuDdbsSXxxETApCcJkLed1iE4Rs4ZQj7","https://cdn.steemitimages.com/DQmTgHNhFzXBrKQZAxiT8FqhcPPF7dX9S4YqR2diki86w6z/ezgif.com-video-to-gif.gif","https://cdn.steemitimages.com/DQmNh3DeVpGvQbG5dS72hAXLkVgcGaVbxg15S773mnebMVH/ezgif.com-video-to-gif%20(1","https://cdn.steemitimages.com/DQmY3gV1UvcQjuSw7tzCV9P3uZzKXDP4MaMjcWV9N4jYdqJ/ezgif.com-video-to-gif%20(2","https://cdn.steemitimages.com/DQmViWeZKn9uawpUWLGxNm2SKJWhPevHFpmXNDN6HzQiA6T/ezgif.com-video-to-gif%20(3"],"tags":["utopian-io","tutorials","python","web","flask"],"users":["app","duski"],"links":["https://github.com/python","https://www.python.org/","http://flask.pocoo.org/","http://docs.peewee-orm.com/en/latest/","https://sqlitebrowser.org/","https://cdn.steemitimages.com/DQmNh3DeVpGvQbG5dS72hAXLkVgcGaVbxg15S773mnebMVH/ezgif.com-video-to-gif%20","https://cdn.steemitimages.com/DQmY3gV1UvcQjuSw7tzCV9P3uZzKXDP4MaMjcWV9N4jYdqJ/ezgif.com-video-to-gif%20","https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js","https://cdn.steemitimages.com/DQmViWeZKn9uawpUWLGxNm2SKJWhPevHFpmXNDN6HzQiA6T/ezgif.com-video-to-gif%20","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-1-desaign-database-and-initial-structure-following-and-follower-functions-1547568096688","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-2-system-routing-and-templating-make-user-register-1547816234338","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-3-register-user-and-store-data-in-sqlite-base-layout-1548251533384","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-4-login-system-and-use-session-to-manage-user-data-1548429289119","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-5-authentication-during-registration-and-user-notification-1548686390863","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-6-view-decorator-and-post-the-first-status-1549029740369","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-7-the-use-of-backref-and-create-profile-features-1549339256879","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-8-handle-error-and-make-the-system-follow-a-user-1549792437933","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-9-context-processor-and-unfollow-system-and-implement-in-the-user-interface-1549980987869","https://steemit.com/utopian-io/@duski.harahap/make-social-media-applications-with-flask-10-stream-tweets-and-feeds-for-each-user-1550384814196","https://github.com/milleaduski/python-web-app"]} | ||||||
created | 2019-03-01 14:27:45 | ||||||
last_update | 2019-03-01 14:27:45 | ||||||
depth | 0 | ||||||
children | 5 | ||||||
last_payout | 2019-03-08 14:27:45 | ||||||
cashout_time | 1969-12-31 23:59:59 | ||||||
total_payout_value | 27.770 HBD | ||||||
curator_payout_value | 9.393 HBD | ||||||
pending_payout_value | 0.000 HBD | ||||||
promoted | 0.000 HBD | ||||||
body_length | 13,168 | ||||||
author_reputation | 60,094,717,098,672 | ||||||
root_title | "Make social media applications with Flask #13: Automation code and AJAX pagination in feeds" | ||||||
beneficiaries |
| ||||||
max_accepted_payout | 100,000.000 HBD | ||||||
percent_hbd | 10,000 | ||||||
post_id | 80,585,210 | ||||||
net_rshares | 62,107,270,242,244 | ||||||
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
tombstone | 0 | 4,191,049,617,143 | 16.94% | ||
penguinpablo | 0 | 195,501,191,551 | 8% | ||
elena-singer | 0 | 34,878,539,896 | 100% | ||
techslut | 0 | 69,237,497,573 | 20% | ||
minersean | 0 | 4,620,425,902 | 75% | ||
erikaflynn | 0 | 13,762,912,852 | 35% | ||
lordneroo | 0 | 15,043,549,146 | 25% | ||
miniature-tiger | 0 | 112,085,464,885 | 50% | ||
aleister | 0 | 8,222,598,913 | 15% | ||
jakipatryk | 0 | 14,096,659,103 | 50% | ||
jga | 0 | 2,548,035,500 | 21.17% | ||
yehey | 0 | 6,548,788,601 | 10% | ||
helo | 0 | 55,101,515,149 | 27.1% | ||
walnut1 | 0 | 41,641,620,569 | 21.17% | ||
lorenzor | 0 | 1,191,732,618 | 10.58% | ||
pinoy | 0 | 98,410,808 | 10% | ||
suesa | 0 | 103,244,478,219 | 25% | ||
codingdefined | 0 | 27,504,307,410 | 20% | ||
veritasvav | 0 | 59,610,658,970 | 100% | ||
tsoldovieri | 0 | 1,537,689,339 | 10.58% | ||
bachuslib | 0 | 19,964,022,735 | 100% | ||
tykee | 0 | 10,475,492,943 | 21.17% | ||
steemitri | 0 | 153,821,909,869 | 100% | ||
iamphysical | 0 | 15,658,750,531 | 90% | ||
felixrodriguez | 0 | 866,764,667 | 7.4% | ||
leir | 0 | 2,005,178,401 | 50% | ||
azulear | 0 | 489,679,060 | 100% | ||
silviu93 | 0 | 5,147,114,943 | 21.17% | ||
jadabug | 0 | 1,226,952,996 | 1% | ||
dakeshi | 0 | 3,013,642,548 | 50% | ||
espoem | 0 | 53,223,779,807 | 29.99% | ||
mcfarhat | 0 | 19,519,700,621 | 10.84% | ||
vishalsingh4997 | 0 | 170,494,046 | 21.17% | ||
elear | 0 | 5,403,639,114 | 42.35% | ||
zoneboy | 0 | 10,697,073,081 | 50% | ||
carloserp-2000 | 0 | 32,657,281,731 | 100% | ||
carlos84 | 0 | 1,512,771,333 | 21.17% | ||
che-shyr | 0 | 715,114,457 | 50% | ||
utopian-io | 0 | 55,502,150,608,044 | 42.35% | ||
shammi | 0 | 5,848,152,945 | 90% | ||
jaff8 | 0 | 54,216,723,045 | 27.1% | ||
amestyj | 0 | 526,451,943 | 10.58% | ||
sandracarrascal | 0 | 90,496,612 | 21.17% | ||
mcyusuf | 0 | 1,615,544,201 | 21.17% | ||
cryptonized | 0 | 27,369,870,420 | 8% | ||
ivymalifred | 0 | 320,201,642 | 10.58% | ||
aussieninja | 0 | 7,895,028,763 | 21.17% | ||
ennyta | 0 | 124,719,120 | 10.58% | ||
dedicatedguy | 0 | 40,895,080,753 | 100% | ||
amosbastian | 0 | 75,383,106,662 | 27.1% | ||
eliaschess333 | 0 | 1,946,562,125 | 10.58% | ||
tdre | 0 | 79,449,286,059 | 100% | ||
ydavgonzalez | 0 | 348,986,742 | 1.05% | ||
gaming.yer | 0 | 70,187,432 | 21.17% | ||
scienceangel | 0 | 60,750,960,832 | 50% | ||
jjay | 0 | 501,263,070 | 100% | ||
portugalcoin | 0 | 13,440,520,747 | 15% | ||
steem-familia | 0 | 69,841,907 | 21.17% | ||
vanarchist | 0 | 2,565,972,905 | 100% | ||
tobias-g | 0 | 121,927,012,369 | 40% | ||
yrmaleza | 0 | 72,333,068 | 10.58% | ||
miguelangel2801 | 0 | 129,196,497 | 10.58% | ||
didic | 0 | 29,556,832,014 | 25% | ||
emiliomoron | 0 | 630,208,695 | 10.58% | ||
celmor | 0 | 554,342,750 | 100% | ||
dr-frankenstein | 0 | 71,499,697 | 1% | ||
ulisesfl17 | 0 | 1,750,318,793 | 100% | ||
arac | 0 | 956,123,845 | 100% | ||
endopediatria | 0 | 107,738,001 | 4.23% | ||
tomastonyperez | 0 | 2,115,067,007 | 10.58% | ||
elvigia | 0 | 1,811,608,861 | 10.58% | ||
ezravandi | 0 | 2,179,124,833 | 1.5% | ||
luiscd8a | 0 | 1,620,421,031 | 80% | ||
road2horizon | 0 | 4,301,672,886 | 5% | ||
eniolw | 0 | 7,616,835,613 | 100% | ||
geadriana | 0 | 99,304,505 | 3.17% | ||
elpdl | 0 | 71,938,518 | 21.17% | ||
josedelacruz | 0 | 980,510,117 | 10.58% | ||
joseangelvs | 0 | 312,274,650 | 21.17% | ||
viannis | 0 | 301,330,343 | 10.58% | ||
feronio | 0 | 1,051,492,518 | 100% | ||
flores39 | 0 | 391,049,520 | 100% | ||
erickyoussif | 0 | 1,092,181,426 | 21.17% | ||
ryuna.siege | 0 | 208,695,246 | 100% | ||
beetlevc | 0 | 1,231,868,899 | 2% | ||
anaestrada12 | 0 | 3,510,871,909 | 21.17% | ||
resteeme6 | 0 | 0 | 5% | ||
joelsegovia | 0 | 590,502,907 | 10.58% | ||
jesusfl17 | 0 | 389,395,908 | 100% | ||
bflanagin | 0 | 3,502,923,227 | 21.17% | ||
asmeira | 0 | 70,308,314 | 21.17% | ||
dalz | 0 | 7,277,365,136 | 16.94% | ||
amart29 | 0 | 809,127,536 | 7.05% | ||
prohunonir | 0 | 530,229,267 | 100% | ||
stefvougacho | 0 | 532,597,387 | 100% | ||
luc.real | 0 | 225,099,790 | 100% | ||
rubenp | 0 | 72,010,800 | 21.17% | ||
jeferc | 0 | 71,477,804 | 21.17% | ||
nieloagranca | 0 | 1,129,303,572 | 8% | ||
victoriau7tp | 0 | 499,935,584 | 100% | ||
steemchoose | 0 | 12,210,129,852 | 5% | ||
dssdsds | 0 | 3,204,325,646 | 21.17% | ||
jayplayco | 0 | 9,985,365,629 | 21.17% | ||
cryptouno | 0 | 529,331,767 | 5% | ||
fran.frey | 0 | 348,469,418 | 10.58% | ||
mops2e | 0 | 320,213,424 | 23.99% | ||
jrevilla | 0 | 128,594,398 | 21.17% | ||
alfonzoasdrubal | 0 | 76,893,882 | 21.17% | ||
swapsteem | 0 | 1,921,063,048 | 21.17% | ||
stem-espanol | 0 | 12,445,999,432 | 21.17% | ||
isnefecthar | 0 | 529,757,515 | 100% | ||
aleestra | 0 | 431,712,100 | 21.17% | ||
yuneitsy | 0 | 176,619,112 | 100% | ||
climdislittpres | 0 | 518,998,900 | 100% | ||
acecdomo1983 | 0 | 508,114,722 | 100% | ||
bygualowab | 0 | 533,784,324 | 100% | ||
nealehardesc | 0 | 508,541,147 | 100% | ||
unkeypluga | 0 | 532,168,073 | 100% | ||
kandtaditha | 0 | 509,629,900 | 100% | ||
steem-ua | 0 | 644,745,947,589 | 6.01% | ||
giulyfarci52 | 0 | 185,237,408 | 10.58% | ||
votes4minnows | 0 | 623,428,237 | 5% | ||
hdu | 0 | 223,662,678 | 2% | ||
tinyvoter | 0 | 856,910,343 | 9.5% | ||
optimizer | 0 | 4,052,660,567 | 2.63% | ||
alex-hm | 0 | 918,565,902 | 50% | ||
wilmer14molina | 0 | 338,342,155 | 21.17% | ||
moyam | 0 | 72,109,531 | 21.17% | ||
balcej | 0 | 72,094,013 | 21.17% | ||
anaka | 0 | 71,737,024 | 21.17% | ||
benhurg | 0 | 72,110,243 | 21.17% | ||
judisa | 0 | 71,899,952 | 21.17% | ||
juddarivv | 0 | 72,110,817 | 21.17% | ||
bluesniper | 0 | 710,519,121 | 0.26% | ||
kakakk | 0 | 3,105,329,542 | 21.17% | ||
mrsbozz | 0 | 108,018,570 | 4% | ||
ascorphat | 0 | 1,957,881,232 | 2.5% | ||
rewarding | 0 | 6,090,388,184 | 71.17% | ||
skymin | 0 | 1,868,430,995 | 12.7% | ||
bejust | 0 | 1,747,674,777 | 100% | ||
jk6276.mons | 0 | 1,612,242,538 | 42.35% | ||
progressing | 0 | 1,578,292,841 | 100% | ||
jaxson2011 | 0 | 1,621,866,975 | 42.35% | ||
eternalinferno | 0 | 204,901,815 | 42.35% | ||
utopian.trail | 0 | 16,931,416,419 | 42.35% | ||
bigmoneyman | 0 | 1,476,901,369 | 8.47% | ||
raspibot | 0 | 433,095,276 | 100% |
Thank you for your contribution @duski.harahap. After analyzing your tutorial we suggest the following points below: - We suggest again putting comments in your code. Besides the explanation that makes during the tutorial if you have a brief description in the code the user understands better. - Your tutorial has been very well structured and in addition GIFs help a lot to see what you have developed. Great job! - Thanks for following some suggestions. Thank you for your work in developing this tutorial. Looking forward to your upcoming tutorials. Your contribution has been evaluated according to [Utopian policies and guidelines](https://join.utopian.io/guidelines), as well as a predefined set of questions pertaining to the category. To view those questions and the relevant answers related to your post, [click here](https://review.utopian.io/result/8/2-1-1-1-1-3-1-3-). ---- Need help? Chat with us on [Discord](https://discord.gg/uTyJkNm). [[utopian-moderator]](https://join.utopian.io/)
author | portugalcoin |
---|---|
permlink | re-duskiharahap-make-social-media-applications-with-flask-13-automation-code-and-ajax-pagination-in-feeds-1551450458559-20190301t223519362z |
category | utopian-io |
json_metadata | {"tags":["utopian-io"],"users":["duski.harahap"],"links":["https://join.utopian.io/guidelines","https://review.utopian.io/result/8/2-1-1-1-1-3-1-3-","https://discord.gg/uTyJkNm","https://join.utopian.io/"],"app":"steemit/0.1"} |
created | 2019-03-01 22:35:18 |
last_update | 2019-03-01 22:35:18 |
depth | 1 |
children | 1 |
last_payout | 2019-03-08 22:35:18 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 8.310 HBD |
curator_payout_value | 2.625 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 1,009 |
author_reputation | 599,460,589,822,571 |
root_title | "Make social media applications with Flask #13: Automation code and AJAX pagination in feeds" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,602,147 |
net_rshares | 17,388,511,315,196 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
yuxi | 0 | 22,617,194,977 | 100% | ||
codingdefined | 0 | 27,894,155,480 | 20% | ||
jadabug | 0 | 1,215,697,221 | 1% | ||
espoem | 0 | 25,436,588,795 | 15% | ||
utopian-io | 0 | 17,162,383,406,501 | 12.37% | ||
jaff8 | 0 | 37,765,663,816 | 19.98% | ||
emrebeyler | 0 | 13,690,347 | 0.01% | ||
amosbastian | 0 | 53,088,635,766 | 19.99% | ||
penghuren | 0 | 610,624,054 | 40% | ||
nenya | 0 | 1,746,837,250 | 80% | ||
sudefteri | 0 | 5,920,053,088 | 100% | ||
reazuliqbal | 0 | 18,207,705,082 | 10% | ||
ezravandi | 0 | 2,174,431,496 | 1.5% | ||
ulockblock | 0 | 19,557,069,774 | 6.26% | ||
nijn | 0 | 837,490,355 | 80% | ||
quenty | 0 | 2,843,030,046 | 60% | ||
curbot | 0 | 2,317,122,783 | 100% | ||
ascorphat | 0 | 1,853,982,613 | 2.5% | ||
nimloth | 0 | 2,027,935,752 | 80% |
Thank you for your review, @portugalcoin! Keep up the good work!
author | utopian-io |
---|---|
permlink | re-re-duskiharahap-make-social-media-applications-with-flask-13-automation-code-and-ajax-pagination-in-feeds-1551450458559-20190301t223519362z-20190304t071252z |
category | utopian-io |
json_metadata | "{"app": "beem/0.20.17"}" |
created | 2019-03-04 07:12:54 |
last_update | 2019-03-04 07:12:54 |
depth | 2 |
children | 0 |
last_payout | 2019-03-11 07:12:54 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 64 |
author_reputation | 152,955,367,999,756 |
root_title | "Make social media applications with Flask #13: Automation code and AJAX pagination in feeds" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,712,067 |
net_rshares | 0 |
#### Hi @duski.harahap! Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation! Your post is eligible for our upvote, thanks to our collaboration with @utopian-io! **Feel free to join our [@steem-ua Discord server](https://discord.gg/KpBNYGz)**
author | steem-ua |
---|---|
permlink | re-make-social-media-applications-with-flask-13-automation-code-and-ajax-pagination-in-feeds-1551450458559-20190301t235914z |
category | utopian-io |
json_metadata | "{"app": "beem/0.20.18"}" |
created | 2019-03-01 23:59:15 |
last_update | 2019-03-01 23:59:15 |
depth | 1 |
children | 0 |
last_payout | 2019-03-08 23:59:15 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 292 |
author_reputation | 23,214,230,978,060 |
root_title | "Make social media applications with Flask #13: Automation code and AJAX pagination in feeds" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,604,268 |
net_rshares | 0 |
Congratulations @duski.harahap! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@duski.harahap/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@duski.harahap)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/carnival/@steemitboard/carnival-2019"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/rltzHT.png"></a></td><td><a href="https://steemit.com/carnival/@steemitboard/carnival-2019">Carnival Challenge - Collect badge and win 5 STEEM</a></td></tr></table> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) and get one more award and increased upvotes!
author | steemitboard |
---|---|
permlink | steemitboard-notify-duskiharahap-20190304t094205000z |
category | utopian-io |
json_metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
created | 2019-03-04 09:42:06 |
last_update | 2019-03-04 09:42:06 |
depth | 1 |
children | 0 |
last_payout | 2019-03-11 09:42:06 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 882 |
author_reputation | 38,975,615,169,260 |
root_title | "Make social media applications with Flask #13: Automation code and AJAX pagination in feeds" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,716,445 |
net_rshares | 0 |
Hey, @duski.harahap! **Thanks for contributing on Utopian**. Weβre already looking forward to your next contribution! **Get higher incentives and support Utopian.io!** Simply set @utopian.pay as a 5% (or higher) payout beneficiary on your contribution post (via [SteemPlus](https://chrome.google.com/webstore/detail/steemplus/mjbkjgcplmaneajhcbegoffkedeankaj?hl=en) or [Steeditor](https://steeditor.app)). **Want to chat? Join us on Discord https://discord.gg/h52nFrV.** <a href='https://steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1'>Vote for Utopian Witness!</a>
author | utopian-io |
---|---|
permlink | re-make-social-media-applications-with-flask-13-automation-code-and-ajax-pagination-in-feeds-1551450458559-20190302t101040z |
category | utopian-io |
json_metadata | "{"app": "beem/0.20.17"}" |
created | 2019-03-02 10:10:42 |
last_update | 2019-03-02 10:10:42 |
depth | 1 |
children | 0 |
last_payout | 2019-03-09 10:10:42 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 595 |
author_reputation | 152,955,367,999,756 |
root_title | "Make social media applications with Flask #13: Automation code and AJAX pagination in feeds" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,620,859 |
net_rshares | 0 |