title
Creating App - Django Web Development with Python 2

description
Welcome to the second Django web development with Python tutorial. This tutorial picks up from the previous one, and is focused on getting a simple page to render some text. After you did the startproject command, a new directory is created, called whatever you named it. We called it mysite. Change directory into your new directory cd mysite. Next, we create a new app for this: python manage.py startapp webapp Now a new directory exists, called webapp. In here, we see a lot of similar files, and some new ones: webapp/ migrations/ __init__.py admin.py apps.py models.py tests.py views.py The app is indeed treated as its own package, with its own __init__.py, along with other files. For now, we will concern ourselves with views.py, and we're actually going to add another file urls.py. http://pythonprogramming.net https://twitter.com/sentdex

detail
{'title': 'Creating App - Django Web Development with Python 2', 'heatmap': [{'end': 708.482, 'start': 673.698, 'weight': 0.701}, {'end': 771.761, 'start': 749.429, 'weight': 0.826}, {'end': 803.566, 'start': 779.669, 'weight': 0.718}], 'summary': 'Tutorial covers adding another app to a django website, building a personal website, emphasizing the importance of apps, creating a new app using manage.py, writing tests in django for ensuring functionality and stability over time, and discussing the django mvc paradigm, app configuration and reuse, as well as providing guidance on adding and configuring new apps, installation process of a web app, modifying urls.py, creating views, and including the app in other packages.', 'chapters': [{'end': 259.676, 'segs': [{'end': 30.063, 'src': 'embed', 'start': 2.868, 'weight': 1, 'content': [{'end': 6.991, 'text': 'What is going on everybody? Welcome to part two of our Django tutorial series.', 'start': 2.868, 'duration': 4.123}, {'end': 13.935, 'text': "In this tutorial we're going to be talking about how to add another app basically because our website right now doesn't really have anything.", 'start': 7.591, 'duration': 6.344}, {'end': 21.539, 'text': "We've got our kind of main hub going on, but we don't have any apps and, as we said before, a website is a combination of apps,", 'start': 13.975, 'duration': 7.564}, {'end': 22.72, 'text': 'so we need at least one app.', 'start': 21.539, 'duration': 1.181}, {'end': 25.081, 'text': "So that's what we're going to do here.", 'start': 23.34, 'duration': 1.741}, {'end': 30.063, 'text': 'Now in the last tutorial we started off with running the server.', 'start': 25.201, 'duration': 4.862}], 'summary': 'Django tutorial: adding a new app to the website.', 'duration': 27.195, 'max_score': 2.868, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM2868.jpg'}, {'end': 85.192, 'src': 'embed', 'start': 42.222, 'weight': 2, 'content': [{'end': 51.769, 'text': 'Again, I explicitly reference Python, but you can probably just do Python manage.py or even Python 3 manage.py and so on.', 'start': 42.222, 'duration': 9.547}, {'end': 56.073, 'text': "I'm just going to hit the up arrow because actually we just referenced manage.py.", 'start': 52.55, 'duration': 3.523}, {'end': 57.554, 'text': "We're not going to run server.", 'start': 56.173, 'duration': 1.381}, {'end': 59.916, 'text': "Instead, we're going to start app.", 'start': 58.014, 'duration': 1.902}, {'end': 64.8, 'text': 'And then you can give this application anything you want, like any name that you want.', 'start': 60.596, 'duration': 4.204}, {'end': 68.022, 'text': "I'm just going to call it web app.", 'start': 65.661, 'duration': 2.361}, {'end': 75.647, 'text': 'So the idea here is in the interest of keeping things as simple as possible, yet also useful.', 'start': 68.983, 'duration': 6.664}, {'end': 78.348, 'text': "the first thing that we're going to do is just build like a personal website.", 'start': 75.647, 'duration': 2.701}, {'end': 85.192, 'text': 'And the personal website will have some, you know, about me page, and then like a blog that you can post on, something like that.', 'start': 78.648, 'duration': 6.544}], 'summary': 'Using python to build a simple personal website with about me page and blog.', 'duration': 42.97, 'max_score': 42.222, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM42222.jpg'}, {'end': 247.732, 'src': 'embed', 'start': 215.645, 'weight': 0, 'content': [{'end': 218.587, 'text': "There's a lot of things that can go wrong for every single update.", 'start': 215.645, 'duration': 2.942}, {'end': 225.551, 'text': 'So what tests do is every update you make everything you do, you write a test in here, a test class?', 'start': 218.587, 'duration': 6.964}, {'end': 234.389, 'text': "let's say, and It's just some code that will run through registering, logging in editing, every time you run a test.", 'start': 225.591, 'duration': 8.798}, {'end': 235.649, 'text': "That way you don't have to do it manually.", 'start': 234.429, 'duration': 1.22}, {'end': 238.05, 'text': "It'll just run through and test it for you.", 'start': 235.689, 'duration': 2.361}, {'end': 247.732, 'text': "So this file will actually probably, by the time your website's complete, it would be a very big, ugly file, but a super useful time-saving file.", 'start': 238.63, 'duration': 9.102}], 'summary': 'Creating tests for updates automates repetitive tasks, saving time and effort.', 'duration': 32.087, 'max_score': 215.645, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM215645.jpg'}], 'start': 2.868, 'title': 'Django tutorial: adding another app and building a personal website', 'summary': 'Covers the process of adding another app to a django website and building a simple personal website, emphasizing the importance of apps, creating a new app using manage.py, and the significance of writing tests in django for ensuring functionality and stability over time.', 'chapters': [{'end': 68.022, 'start': 2.868, 'title': 'Django tutorial: adding another app', 'summary': "Covers the process of adding another app to a django website, emphasizing the importance of apps in building a website and detailing the steps to create a new app using manage.py, with the example of creating an app called 'web app'.", 'duration': 65.154, 'highlights': ['The process of adding another app to a Django website is explained, highlighting the significance of apps in building a website and the need for at least one app.', "Detailed steps to create a new app using manage.py are provided, including the command to start the app and the option to name the application, exemplified by creating an app called 'web app'.", 'Instructions to break the server using control C and reference manage.py are mentioned, with the recommendation to use Python manage.py or Python 3 manage.py, followed by starting the app instead of running the server.']}, {'end': 259.676, 'start': 68.983, 'title': 'Building a personal website', 'summary': 'Covers building a simple personal website with an about me page and a blog, and the importance of writing tests in django for ensuring the functionality and stability of the website over time.', 'duration': 190.693, 'highlights': ['Writing tests in Django is essential for ensuring the functionality and stability of the website over time, as it automates the process of testing every update and functionality, saving time and preventing potential issues. This can be particularly crucial for larger websites with a lot of functionality. By the time the website is complete, the test file will likely be a very big, ugly file, but a super useful time-saving file.', 'The personal website being built will have an about me page and a blog for posting content, keeping it simple yet useful. This approach aims to help the individual end up with something somewhat useful in the end. The focus is on starting with a simple personal website and possibly moving on to a more complex one in the future.', "The chapter emphasizes the importance of writing tests in Django by explaining that it helps in automating the process of testing every update, registration, login, and other functionalities, saving time and ensuring the stability of the website. The tests act as a proactive measure against potential issues that may arise with updates and changes to the website's functionalities and processes."]}], 'duration': 256.808, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM2868.jpg', 'highlights': ['Writing tests in Django is essential for ensuring the functionality and stability of the website over time, automating the process of testing every update and functionality, saving time and preventing potential issues.', 'The process of adding another app to a Django website is explained, highlighting the significance of apps in building a website and the need for at least one app.', "Detailed steps to create a new app using manage.py are provided, including the command to start the app and the option to name the application, exemplified by creating an app called 'web app'.", 'The chapter emphasizes the importance of writing tests in Django by explaining that it helps in automating the process of testing every update, registration, login, and other functionalities, saving time and ensuring the stability of the website.', 'The personal website being built will have an about me page and a blog for posting content, keeping it simple yet useful.']}, {'end': 1038.597, 'segs': [{'end': 289.694, 'src': 'embed', 'start': 259.696, 'weight': 0, 'content': [{'end': 259.995, 'text': "Don't worry.", 'start': 259.696, 'duration': 0.299}, {'end': 261.416, 'text': "And then you've got views.", 'start': 260.576, 'duration': 0.84}, {'end': 263.897, 'text': 'This is just what the user sees basically.', 'start': 261.495, 'duration': 2.402}, {'end': 266.378, 'text': 'So Django is a model view controller.', 'start': 263.997, 'duration': 2.381}, {'end': 270.159, 'text': "You've got your models, your views, and the urls.py is your controller.", 'start': 266.998, 'duration': 3.161}, {'end': 272.483, 'text': 'So let me pull up a picture here.', 'start': 270.822, 'duration': 1.661}, {'end': 280.148, 'text': 'So in the past, our previous picture in the last tutorial was just this with the web project and then all your sub apps basically.', 'start': 272.623, 'duration': 7.525}, {'end': 284.351, 'text': "We can now kind of populate that a bit more and you'll see why in this tutorial.", 'start': 280.488, 'duration': 3.863}, {'end': 287.513, 'text': 'So the main website has its own urls.py.', 'start': 284.831, 'duration': 2.682}, {'end': 289.694, 'text': "You've seen it, but it currently doesn't really do much.", 'start': 287.553, 'duration': 2.141}], 'summary': 'Django follows a model-view-controller architecture with models, views, and urls.py serving as the controller.', 'duration': 29.998, 'max_score': 259.696, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM259696.jpg'}, {'end': 405.837, 'src': 'embed', 'start': 353.607, 'weight': 1, 'content': [{'end': 362.858, 'text': 'You can literally just like take that exact app and move it right on over to your other website and On that same kind of thread,', 'start': 353.607, 'duration': 9.251}, {'end': 367.824, 'text': "you actually can download other people's apps and use them really quick and really easy.", 'start': 362.858, 'duration': 4.966}, {'end': 373.584, 'text': "So that's why this Django paradigm just makes a whole lot of sense to use.", 'start': 368.598, 'duration': 4.986}, {'end': 382.275, 'text': 'So moving along, we need to go ahead and get started making our own, basically connecting this app.', 'start': 374.506, 'duration': 7.769}, {'end': 384.839, 'text': 'So, every time you start an app, what do we do from there??', 'start': 382.315, 'duration': 2.524}, {'end': 388.422, 'text': 'Well, first of all, if we come over here to our settings,', 'start': 385.279, 'duration': 3.143}, {'end': 394.347, 'text': "here we should see we'll scroll down to installed apps that it just simply doesn't exist here.", 'start': 388.422, 'duration': 5.925}, {'end': 397.55, 'text': "We don't actually have this.", 'start': 394.587, 'duration': 2.963}, {'end': 401.854, 'text': 'Our new app basically just is not here.', 'start': 398.13, 'duration': 3.724}, {'end': 405.837, 'text': 'So the first thing that you might want to do is just add web app.', 'start': 402.434, 'duration': 3.403}], 'summary': 'Django allows easy app integration and installation, but new apps need to be added to settings.', 'duration': 52.23, 'max_score': 353.607, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM353607.jpg'}, {'end': 468.079, 'src': 'embed', 'start': 443.121, 'weight': 4, 'content': [{'end': 451.507, 'text': "as Django was coming out and really it's still true today everyone just keeps asking for feature after feature after feature,", 'start': 443.121, 'duration': 8.386}, {'end': 456.175, 'text': "And eventually it just became a saying like no, you can't have a pony right?", 'start': 452.134, 'duration': 4.041}, {'end': 458.156, 'text': 'Because people just wanted everything, okay?', 'start': 456.195, 'duration': 1.961}, {'end': 463.518, 'text': 'And so it kind of became the unofficial mascot of Django for this, like you know, flying pink pony,', 'start': 459.376, 'duration': 4.142}, {'end': 468.079, 'text': 'because of basically all the feature requests that people were making.', 'start': 463.518, 'duration': 4.561}], 'summary': "Django faced endless feature requests, leading to the saying 'no, you can't have a pony' as its unofficial mascot.", 'duration': 24.958, 'max_score': 443.121, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM443121.jpg'}, {'end': 601.392, 'src': 'embed', 'start': 575.313, 'weight': 5, 'content': [{'end': 579.955, 'text': "So this includes that webapp.urls file, and that'll be .urls.py.", 'start': 575.313, 'duration': 4.642}, {'end': 582.655, 'text': "That doesn't exist yet, but we're about to make it.", 'start': 580.555, 'duration': 2.1}, {'end': 590.179, 'text': "So what it'll do is when someone goes to your website slash webapp, It's then going to say, okay, cool.", 'start': 582.775, 'duration': 7.404}, {'end': 597.468, 'text': "Now that we're here, we need to consult webapp.urls to figure out what view we need to serve up for the user.", 'start': 590.62, 'duration': 6.848}, {'end': 601.392, 'text': "Now we're using this keyword include, which we don't actually have yet.", 'start': 598.108, 'duration': 3.284}], 'summary': 'Creating a .urls.py file to handle user requests for the webapp.', 'duration': 26.079, 'max_score': 575.313, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM575313.jpg'}, {'end': 708.482, 'src': 'heatmap', 'start': 673.698, 'weight': 0.701, 'content': [{'end': 679.783, 'text': "It'll be just a big hey in the heading two tags.", 'start': 673.698, 'duration': 6.085}, {'end': 683.458, 'text': "So that's our view for this index request.", 'start': 681.175, 'duration': 2.283}, {'end': 685.702, 'text': "So that's the view.", 'start': 684.139, 'duration': 1.563}, {'end': 690.329, 'text': 'Now how do we control that view to show? Well, we use urls.py for this.', 'start': 685.722, 'duration': 4.607}, {'end': 693.253, 'text': "So that's our views, and now we need a urls.py.", 'start': 690.349, 'duration': 2.904}, {'end': 696.738, 'text': "We don't actually have one, so I'm just gonna just take views, copy, paste.", 'start': 693.293, 'duration': 3.445}, {'end': 699.36, 'text': 'call it urls.', 'start': 697.359, 'duration': 2.001}, {'end': 704.081, 'text': "now we're going to open it and it needs to not be the views.", 'start': 699.36, 'duration': 4.721}, {'end': 708.482, 'text': "but what we're going to say here for this is going to be from django.com.", 'start': 704.081, 'duration': 4.401}], 'summary': 'Creating a urls.py to control views in django website.', 'duration': 34.784, 'max_score': 673.698, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM673698.jpg'}, {'end': 782.431, 'src': 'heatmap', 'start': 749.429, 'weight': 0.826, 'content': [{'end': 750.39, 'text': "There's nothing here.", 'start': 749.429, 'duration': 0.961}, {'end': 751.371, 'text': "It's just start and end.", 'start': 750.41, 'duration': 0.961}, {'end': 752.192, 'text': "That's that.", 'start': 751.591, 'duration': 0.601}, {'end': 754.233, 'text': "That's the URL pattern.", 'start': 753.072, 'duration': 1.161}, {'end': 758.777, 'text': "And if that is the URL pattern, it's going to return the views.index.", 'start': 754.734, 'duration': 4.043}, {'end': 760.619, 'text': 'So that is here.', 'start': 759.218, 'duration': 1.401}, {'end': 767.817, 'text': 'Views is this file.index is this function.', 'start': 763.573, 'duration': 4.244}, {'end': 770.26, 'text': "What is it doing? It's returning this response.", 'start': 768.198, 'duration': 2.062}, {'end': 771.761, 'text': 'So close out of that.', 'start': 770.9, 'duration': 0.861}, {'end': 773.343, 'text': 'Here we go.', 'start': 773.062, 'duration': 0.281}, {'end': 778.067, 'text': "It returns views.index, and then we'll give it a name.", 'start': 773.803, 'duration': 4.264}, {'end': 782.431, 'text': "For now, that's, well, it needs a namespace, so yeah.", 'start': 779.669, 'duration': 2.762}], 'summary': 'Describes url pattern returning views.index, file.index function, and response.', 'duration': 33.002, 'max_score': 749.429, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM749429.jpg'}, {'end': 811.17, 'src': 'heatmap', 'start': 779.669, 'weight': 0.718, 'content': [{'end': 782.431, 'text': "For now, that's, well, it needs a namespace, so yeah.", 'start': 779.669, 'duration': 2.762}, {'end': 789.617, 'text': "So name is index, okay? So once we've done that, we should be all set.", 'start': 782.772, 'duration': 6.845}, {'end': 792.439, 'text': "I might be forgetting something, but we'll save that, close that.", 'start': 789.657, 'duration': 2.782}, {'end': 797.342, 'text': "And if I am forgetting something, we'll get an error, and then we can explain why those errors are so useful.", 'start': 792.939, 'duration': 4.403}, {'end': 800.124, 'text': "So we'll bring back over the terminal.", 'start': 797.942, 'duration': 2.182}, {'end': 803.566, 'text': "The server is not running, so I'm just going to hit up arrow, up arrow.", 'start': 800.204, 'duration': 3.362}, {'end': 806.788, 'text': 'So Python, manage.py, run server.', 'start': 803.946, 'duration': 2.842}, {'end': 811.17, 'text': "Go ahead and, oh, well, we probably need to, let's see, we'll see what it says.", 'start': 807.148, 'duration': 4.022}], 'summary': "Setting up namespace 'index' and running server using python, manage.py", 'duration': 31.501, 'max_score': 779.669, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM779669.jpg'}, {'end': 966.068, 'src': 'embed', 'start': 935.203, 'weight': 7, 'content': [{'end': 937.024, 'text': "that's how the Django app actually works.", 'start': 935.203, 'duration': 1.821}, {'end': 937.764, 'text': 'It just connects.', 'start': 937.084, 'duration': 0.68}, {'end': 943.974, 'text': 'these applications based on the URLs, and initially, when I started out with Django,', 'start': 938.43, 'duration': 5.544}, {'end': 951.92, 'text': "I was somewhat confused because to me it just doesn't really make that much sense to have multiple URLs.py.", 'start': 943.974, 'duration': 7.946}, {'end': 959.644, 'text': "and what makes it nice, though, is you could take now, Let's say, web app is a really epic application.", 'start': 951.92, 'duration': 7.724}, {'end': 966.068, 'text': "you could take web app and include it in another website, and web app can be Like, for example, like, let's say,", 'start': 959.644, 'duration': 6.424}], 'summary': 'Django app connects applications based on urls, allowing for modular use in other websites.', 'duration': 30.865, 'max_score': 935.203, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM935203.jpg'}], 'start': 259.696, 'title': 'Django mvc paradigm and app configuration', 'summary': 'Discusses the django mvc paradigm, emphasizing app configuration and reuse, and provides guidance on adding and configuring new apps. it also covers django features and the installation process of a web app, highlighting the unofficial mascot and the steps involved in modifying urls.py, creating views, and including the app in other packages.', 'chapters': [{'end': 424.83, 'start': 259.696, 'title': 'Django mvc paradigm and app configuration', 'summary': 'Discusses the django mvc paradigm, which consists of models, views, and controllers (urls.py), and emphasizes the ease of app configuration and reuse, highlighting the seamless transfer of apps between websites and the convenience of using pre-built apps. the chapter also provides guidance on adding a new app and configuring it in the settings file.', 'duration': 165.134, 'highlights': ['Django follows the MVC paradigm, comprising models, views, and controllers (urls.py), offering a built-in structure for ease of development and organization.', 'The ease of transferring apps between websites is illustrated, showcasing the convenience of reusing the exact app structure for different websites.', 'The convenience of using pre-built apps is emphasized, allowing for quick and easy integration of external app functionalities into projects.', 'Guidance on adding a new app and configuring it in the settings file is provided, highlighting the process of including the new app in the installed apps section of the settings.']}, {'end': 1038.597, 'start': 424.87, 'title': 'Django features and web app installation', 'summary': 'Discusses the plethora of features that come with django, including the unofficial mascot, a flying pink pony, to represent the numerous feature requests, and details the installation process of a web app, from modifying urls.py to creating views and including the app in other packages.', 'duration': 613.727, 'highlights': ['The unofficial mascot of Django is a flying pink pony, symbolizing the numerous feature requests, which have been largely honored, contributing to the impressive high-level framework that exists today.', 'The modification of urls.py is detailed, including the addition of a new URL pattern to point to a web app and the creation of a separate urls.py file for the web app, which includes a URL pattern to return a specific view.', 'The process of creating views and urls.py for the web app is explained, including the use of simple HTTP response and relative imports to control the view and specify URL patterns.', 'The explanation of how Django connects applications based on URLs is provided, highlighting the flexibility to include an application in multiple packages and the ease of adding an application to the main site settings.', 'The installation process of a web app is summarized, with the mention of potential migration requirements for models and the simple application installation process in Django settings.']}], 'duration': 778.901, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/iZ5my3krEVM/pics/iZ5my3krEVM259696.jpg', 'highlights': ['Django follows the MVC paradigm, offering a built-in structure for ease of development and organization.', 'The ease of transferring apps between websites showcases the convenience of reusing the exact app structure for different websites.', 'The convenience of using pre-built apps allows for quick and easy integration of external app functionalities into projects.', 'Guidance on adding a new app and configuring it in the settings file is provided, highlighting the process of including the new app in the installed apps section of the settings.', 'The unofficial mascot of Django is a flying pink pony, symbolizing the numerous feature requests and contributing to the impressive high-level framework that exists today.', 'The modification of urls.py is detailed, including the addition of a new URL pattern to point to a web app and the creation of a separate urls.py file for the web app.', 'The process of creating views and urls.py for the web app is explained, including the use of simple HTTP response and relative imports to control the view and specify URL patterns.', 'The explanation of how Django connects applications based on URLs is provided, highlighting the flexibility to include an application in multiple packages and the ease of adding an application to the main site settings.', 'The installation process of a web app is summarized, with the mention of potential migration requirements for models and the simple application installation process in Django settings.']}], 'highlights': ['Writing tests in Django is essential for ensuring the functionality and stability of the website over time, automating the process of testing every update and functionality, saving time and preventing potential issues.', 'The process of adding another app to a Django website is explained, highlighting the significance of apps in building a website and the need for at least one app.', "Detailed steps to create a new app using manage.py are provided, including the command to start the app and the option to name the application, exemplified by creating an app called 'web app'.", 'Django follows the MVC paradigm, offering a built-in structure for ease of development and organization.', 'The ease of transferring apps between websites showcases the convenience of reusing the exact app structure for different websites.', 'The convenience of using pre-built apps allows for quick and easy integration of external app functionalities into projects.', 'Guidance on adding a new app and configuring it in the settings file is provided, highlighting the process of including the new app in the installed apps section of the settings.', 'The modification of urls.py is detailed, including the addition of a new URL pattern to point to a web app and the creation of a separate urls.py file for the web app.', 'The process of creating views and urls.py for the web app is explained, including the use of simple HTTP response and relative imports to control the view and specify URL patterns.', 'The explanation of how Django connects applications based on URLs is provided, highlighting the flexibility to include an application in multiple packages and the ease of adding an application to the main site settings.', 'The personal website being built will have an about me page and a blog for posting content, keeping it simple yet useful.']}