62. django MTV model (urls, view), djangourls
Today, we enter the most important stage of python. The django framework is like glue, which binds all the knowledge points we learned earlier, so you can see the previous essays for some vague information. This article describes the djangoMTV model, the URL Configuration System (URlconf) at the view layer, and the view functions (views) at the view layer ).
1. MTV Model
1. Main python frameworks:
Django: Big and complete
Flask: small but refined
2. Django's MTV
Model: database-related operations (ORM)
Template: Template syntax ---> How to skillfully embed variables (database data) into html pages
View: logical processing
In addition, Django also has a urls distributor: ing between paths and view functions.
3. Relationship Diagram
2. Basic django commands
1. Download
pip3 install django
2. Create a project
django-admin.py startproject mysite
Manage. py ----- A tool in the Django project that can call django shell and database.
Settings. py ---- contains the default settings of the project, including database information, debugging flag, and other working variables.
Urls. py ----- maps the URL mode to the application.
3. Create an application
python manage.py startapp blog
Models. py --- database-related operations.
Tests. py --- used for testing
Views. py --- used for write logic processing
4. Start the project
python manage.py runserver IP PORT
IP Address: the default local machine can be left empty
PORT: The default value is 8000.
3. View-layer routing configuration system (URlconf)
Function: Establishes the ing between url and view functions.
That is to say, tell Django to call this code for this URL, and call that code for that URL.
Basic Format:
'''Urlpatterns = [url (Regular Expression, views function, parameter, alias),] parameter description: a regular expression string, a callable object, it is usually an optional name parameter ''' for a view function or a string that specifies the path of the view function. The default parameter (in dictionary form) to be passed to the view function '''
1. Simple examples
From django. conf. urls import urlfrom project import viewsurlpatterns = [url (R' ^ articles/2003/$ ', views. special_case_2003), url (R' ^ articles/([0-9] {4})/([0-9] {2})/$ ', views. month_archive),]
Note:
''' Once the match is successful, it no longer matches the first url. to capture a value from the URL, you only need to place a pair of parentheses around it. You do not need to add a leading backslash because each URL has a backslash. For example, it should be ^ articles rather than ^/articles. The 'r' before each regular expression is optional, but we recommend that you add it. '''
2. Famous groups
1 url (R' ^ articles/(\ d {4})/(\ d {2}) $ ', views. year_month) # year (requset, 1990,12) by location parameter 2 famous group
Url (R' ^ articles /(? P <year> \ d {4 })/(? P <month> \ d {2}) $ ', views. year_month) # year (requset, year = 1990, month = 12) parameters are passed by position
3. search methods
In a http://www.example.com/myapp/ request, URLconf looks for myapp /.
In http://www.example.com/myapp? In the page = 3 Request, URLconf will still find myapp /.
URLconf does not check the request method. All request methods --> POST, GET, HEAD, etc. of the same URL --> route to the same function.
4. url Distribution
If there are too many applications in a project, resulting in too many coupling methods, we can use include to decouple and create a urls in each application.
Urls in the project:
from django.conf.urls import include, urlfrom django.contrib import adminurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^blog/', include('blog.urls')),]
Urls in the application:
From django. conf. urls import urlimport viewsurlpatterns = [url (r '^ articles/2003/05 $', views. year_mon2), # year (requset, 1990,12) url (R' ^ articles /(? P <year> \ d {4 })/(? P <month> \ d {2}) $ ', views. year_month), # year (requset, year = 1990, month = 12) parameter by position]
5. pass additional options to the view function (understanding)
django.conf.urls.url()
A function can receive an optional third parameter, which is a dictionary that indicates the additional keyword parameter that you want to pass to the view function.
from django.conf.urls import urlfrom . import viewsurlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),]
In this example/blog/2005/
Request, Django will callviews.year_archive(request, year='2005', foo='bar')
.
6,Reverse URL resolution (alias)
Example: the following URL (name)
from django.conf.urls import urlfrom django.contrib import adminfrom app1 import viewsurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', views.login), url(r'^login/', views.login,name="login")]
You can use the following method in the template code to obtain them (submit: action): (the template will be mentioned later)
<! DOCTYPE html>
In this way, no errors will occur elsewhere when your matching rules and paths change.
IV,View functions (views) at the view layer)
1. SimpleView:
A view function (view for short) is used for logical processing. Is a simple Python function that accepts Web requests and returns Web responses.
1) The following is a view that returns the current date and time as an HTML document:
from django.http import HttpResponseimport datetimedef current_datetime(request): now = datetime.datetime.now() html = "
2) It must contain two objects:
Requset ----> request information
Httpresponse ----> response string
2. What data is contained in the request (key)
Request. GET: GET request data {} request. POST: Data in the POST request {} request. method: request method: When a GET or POST request has multiple values under a key: request. POST. getlist ("holobby") request. path: Request path request url: http: // 127.0.0.1: 8000/index.html/23? A = 1 request. path:/index.html/23 request. get_full_path () request url: http: // 127.0.0.1: 8000/index.html/23? A = 1 request. get_full_path ():/index.html/23? A = 1 COOKIES: standard Python dictionary objects that contain all cookies. Both keys and values are strings. FILES: Class dictionary object that contains all uploaded FILES. Each Key in FILES is the value of the name attribute in the <input type = "file" name = ""/> label, each value in FILES is also a standard python dictionary object, which contains the following three Keys: filename: Upload File Name, represented by a string, content_type: Content Type, content: user: the original content of the uploaded file. It is a django. contrib. auth. models. user object, representing the current login User. If the user is not logged on, the user will be initialized as the django. contrib. auth. models. AnonymousUser instance. You can use the is_authenticated () method of the user to identify whether the user logs in: if req. user. is_authenticated (); this attribute is available only when AuthenticationMiddleware in Django is activated: the unique read/write attribute, representing the dictionary object of the current session; this attribute is available only when you have enabled session support in Django.
3. Httpresponse Function
HttpReponse is a common class used to process returned results after the server receives a browser request. It is mainly used to return strings.
It is mandatory in every request, even if you use a render for example:
def render(request, template_name, context=None, content_type=None, status=None, using=None): """ Returns a HttpResponse whose content is filled with the result of calling django.template.loader.render_to_string() with the passed arguments. """ content = loader.render_to_string(template_name, context, request, using=using) return HttpResponse(content, content_type, status)
The internal function of render eventually returns HttpResponse.
4. render Function
Render (request, template_name [, context])
Combines a given template with a given context dictionary, and returns a rendered HttpResponse object.
Parameters:
Request: The request object used to generate the response.
Template_name: the complete name of the template to be used, an optional parameter (that is, the webpage we are talking about)
Context: a dictionary added to the template context. The default value is an empty dictionary. If a value in the dictionary is callable, the view will call it before rendering the template.
Content_type: MIME type to be used for the generated document. The default value is DEFAULT_CONTENT_TYPE.
Status: status Code of the response. The default value is 200.
def index(request): name="yuan" return render(request,"index.html",{"n":name})
5. redirect function (redirection)
The parameters can be:
A model: callsGet_absolute_url ()Function
A view with parameters:Urlresolvers. reverseTo reverse parse the name
An absolute or relative URL that uses the original block as the redirection location.
A temporary redirection is returned by default.Permanent = TrueReturns a permanent redirect.
def index(request): return redirect("/login.html/")
The view function of login.html will be re-created from urlsand can also be directly written to the address for redirection.
6. Differences between render and resdirect
Render: only the page content is returned, but the second request is not sent, and the url is not refreshed. Therefore, after refreshing, the page will return to the previous page.
Redirect: the second request, url update
If the page requires template language rendering and the database data needs to be loaded to html, the render method will not display this part.
Note:
When using post requests, You Need To comment out a line of code in the settings. py configuration file.
MIDDLEWARE = ['django. middleware. security. securityMiddleware ', 'django. contrib. sessions. middleware. sessionMiddleware ', 'django. middleware. common. commonMiddleware ', # 'django. middleware. csrf. csrfViewMiddleware is the line 'django. contrib. auth. middleware. authenticationMiddleware ', 'django. contrib. messages. middleware. messageMiddleware ', 'django. middleware. clickjacking. XFrameOptionsMiddleware ',]