360ai-org.translate.goog Open in urlscan Pro
2a00:1450:4001:806::2001  Public Scan

Submitted URL: https://translate.google.com/translate?hl=en&sl=zh-CN&u=https://360ai.org/article/5077173.html&prev=search&pto=aue
Effective URL: https://360ai-org.translate.goog/article/5077173.html?_x_tr_sl=zh-CN&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=sc
Submission: On May 20 via manual from GB — Scanned from GB

Form analysis 1 forms found in the DOM

POST //translate.googleapis.com/translate_voting?client=wt_search_lib

<form id="goog-gt-votingForm" action="//translate.googleapis.com/translate_voting?client=wt_search_lib" method="post" target="votingFrame" class="VIpgJd-yAWNEb-hvhgNd-aXYTce"><input type="text" name="sl" id="goog-gt-votingInputSrcLang"><input
    type="text" name="tl" id="goog-gt-votingInputTrgLang"><input type="text" name="query" id="goog-gt-votingInputSrcText"><input type="text" name="gtrans" id="goog-gt-votingInputTrgText"><input type="text" name="vote" id="goog-gt-votingInputVote">
</form>

Text Content

360AI.ORG 360AI.ORG
 * front page
 * open source project
 * tech blog
 * solution
 * video tutorial
 * web template




Home > Technical Articles


DJANGO LEARNING THE SECOND DAY

xiaoxiaobaiOriginal text




1. FEATURES OF DJANGO

Create a Django project:

django-admin startproject project name  (just to create a project, the following
commands are used in the following commands)


Create a Django application:

python manage.py startapp application name

Start a Django project:


python manage.py runserver IP PORT does not follow the IP port, the default is
the local IP and port 8000


Django is the most comprehensive framework in the web framework, with many
functions encapsulated. At present, the most used ones on the market are django
and flask


Django is large and comprehensive. It has many functions, and it does not have a
very clear requirement. We have to set it according to our own needs, so there
are many customized contents. Everything is ready for you, just use it directly.

flask is small and refined. It is an assembled web framework, it does not have
its own ORM, but all its functions can be assembled through other plug-ins, it
is like building blocks, you can assemble which parts you want to use. All the
interfaces are assembled, as long as you piece it together

Both frameworks have their own advantages. If you are proficient in one
framework, you will naturally understand other web frameworks. The frameworks
are similar, but the syntax is different. We don't need to customize the
functions that django provides us, we just need to call them in django. We only
need to learn how to use django, and don't have to worry about the principles of
its underlying implementation. If you don't understand, you can check the
official Chinese documentation of django, which is the most complete
documentation of django.


2. THE SYNTAX FORMAT OF THE URL CONFIGURATION SYSTEM

1. Django project structure description


Create a hierarchy generated by a django project:



manage.py - a tool in the Django project, through which you can call the django
shell and database, etc.

mysite     - the top mysite is custom, it's just a folder name.

       ——The following mysite is a specific package , because it contains the
__init__.py file, so it can be called by us. It is a global content. All the
files in mysite are not related to the application, but on top of the
application. Each application has these configuration information.

In mysite, we focus on two files, setting.py and urls.py :

setting.py - Contains default settings for the project, including database
information, debug flags, and other working variables

urls.py - responsible for mapping url patterns to applications

2. Django application structure description:

app01: django application created



In the Django application, we focus on models.py and views.py

3. Routing configuration system

The Django model we are going to learn belongs to the MTVC model

M——model module: a module that deals with the database.

T——templates template: stores all html files.

V——view view: related to processing logic.

C——controller controller (also called routing distribution system): configure
urls part

Routing distribution system controller:

The distribution system and controllers in Django are already done, unlike other
frameworks that have to design controllers. What we have to do is just learn the
corresponding relationship of Django. After learning the corresponding
relationship, the routing distribution system will also learn it.

打开pycharm,创建一个叫mysite的django项目,并创建一个名为blog的应用,创建好后,不写任何代码一样可以正常运行。在pycharm的终端输入python
manage.py runserver 127.0.0.1:8000或直接按pychram上的快捷键即可启动项目

也可以对项目进行配置:在pycharm上找到



在浏览器里输入127.0.0.1:8080显示以下页面,这是项目的根目录,显示的内容是django给我们设定好的,告诉我们django项目已经启动起来了且可以正常工作。



4、写一个显示当前时间的小项目:

(1)配置路径



 (2)创建一个叫show_time的视图函数



(3)打开浏览器输入127.0.0.1:8080/timer/



直接输入127.0.0.1:8080会提示找不到页面



那是因为我们自己添加了一个路径,没添加之前,django会默认显示根目录自带的页面,添加路径后,django它会认为程序员设计自己的需求了,所以根目录就不会再有任何页面了。

所以我们应该在浏览器中输入127.0.0.1:8080/timer/则显示当前系统的时间了。

 

 5、路由分配系统(urls.py里的映射关系)

功能:客户端访问的url的路径(path)与视图函数一 一映射关系

语法格式:

urlpatterns = [

    url(正则表达式,views视图函数,参数,别名),

  ]

 6、写一个查阅博客的小程序:

要求:查阅2004年所有的博客

(1)配置路径:

一
旦匹配成功,就会调用视图函数这个函数,然后往视图函数里传入一个实参,这个实参是web服务器传的,它封装好后给调用者让它传进来的,相当于每个视图函数的形参就是请求信息的"request"t对象。



(2)创建一个视图函数



 补充:无论是返回render还是HttpResponse,它最终返回的就是HttpResponse字符串对象

(3)打开浏览器进行测试



7、正则表达式



2004前面的 ”^“ 表示以2004/开头进行匹配。

在浏览器中输入127.0.0.1:8080/2004/2003/2002等,只要是以2004开头的,不管后面有多少字符都能匹配得到。

如果只想匹配2004这个页面,则加上"$"



对于博客类的网站我们不可能用一个年份对应一个视图函数,我们会用一个视图函数处理所有年份,所以我们不能直接写死了年份,必须通过正则表达式来匹配出一个具体的年份。那么我们现在写一个可以通过一个视图函数来完成所有年份的查询的代码:



创建一个year_query的视图函数:



上图中视图的year_2004函数没有删除,所以我们在浏览器中输入的127.0.0.1:8080/2004/
依然会显示2004,那是因为两个正则同时满足时,程序会按从上到下的顺序匹配,当匹配第一个成功时,则走第一个视图返回的信息,这一次请求也就结束了,就不会再走下面的了。



无名分组:

url(r'^\d{4}/$',year_queary)中的\d{4}是想传给视图函数的一个数字,只要想传给它做一个分组,在正则表达式里面通过小括号进行分组:url(r'^(\d{4})/$',year_query),进行分组后,在浏览器中输入:127.0.0.1:8080/2007/会报错,那是因为只要我做了分组之后,这个url就会认为(\d{4})这个内容是想传给视图year_query的一个参数的。也就是说它在调用的时候不光加上一个request,还会把2007传进去,它会把分组的内容作为一个参数传给视图函数,这个year_query函数里只有1个形参,但是我传了2007和request两个,所以会报错。







解决方法:在视图函数year_query里再加上一个形参:

def year_query(request,year):                     # year这个名字随便取,只要意思知道就行了。

    return HttpResponse('OK')

这个year形参就是urls.py里的url(r'^(\d{4})/$',year_queary)中的(\d{4})传过来的。

 

这样就解决了,如下图:




三、URL配置系统之分组

1、无名分组

继续上面的查问博客内容的项目:

要求:用户搜索的博客内容不仅要匹配到年份,还要匹配到月份。





最后在浏览器中输入:

 

总结:我们能够通过路径分组可以给视图函数传参数,这种方式叫做无名分组

2、命名分组

继续博客查阅项目:

如果把urls.py里的year_query函数中形参的位置顺序打乱,程序运行不会有任何问题,但是结果就有问题了:





显示的结果就乱套了:



因为我是按位置传参的,一 一对应的,所以才会乱套。解决方法就是用有名参数,解决方法如下:

用?P<名字>来命名。(大写的字母P)

url(r'^(?P<year>\d{4})/(?P<month>\d{2}$)',year_query)

此时视图函数里形参位置可以随意放,但是名字必须叫year和month,必须要一 一对应:

def year_query(request,year,month):

  pass




输出结果:




四、URL配置系统之NAME参数

路由分配系统 urls.py的语法格式:

urlpatterns = [

        url(正则表达式 , views视图函数 , 参数 , 别名)

]

路由分配系统的语法中别名的作用:

1、写个注册的小项目:



 

action:

action是html语法form表单中所属性,表示当提交表单时,向何处发送表单数据。



显示结果:

 

但是点击提交后出现下面这种情况,这是查看post数据时,django自带的一种安全机制



解决方法:注释setting里的django安全措施——csrf



最后,再提交一次页面显示注册成功:

        

 2、别名功能

在实际工作中,公司因为业务的需要,比如某个项目下线了或某个页面更改了可能会更改到路径的名字的变化,路径名改了,所有与这个路径名相关的内容的名字都要改。为了避免这种事情,解决方法则需要用到路由分配系统urls.py中的别名功能了:

比如:要把用户注册的页面名reg改成regs,则所有与其相关的内容路径名都得改,这里我们要做的就是给urls.py里添加别名了,具体步骤如下:

(1)在视图函数后面加上name="自定义别名"

url(r'^regs/',reg,name="register")



(2)回到模板,找到相对应的html代码里,找到form表单的action属性,将这里改为{% url '自定义的别名' %}

action={% url 'register' %}



(3)写好视图函数



 render方法渲染的是reg.html这个页面,当它在reg.html中发现{% url
'register'%}这个别名的时候,它不会把这个内容直接发给用户,它会处理这个格式的别名,它会先到urls.py里找到一个别名叫register的别名,根据别名对应找到regs/这个路径,然后把更改过名字的/regs的这个路径再放到reg.html中进行处理,最后才发给用户。

 (4)最后在浏览器中打开输入127.0.0.1:8080/regs/,测试成功:




五、URL配置系统之路由分发

 一个django项目可以有多个应用,单从功能上而言,它们是相互独立的。

1、配置网站根目录首页

 以上的项目由于没有给首页所以会报错



(1)先配置一个首页









(2)然后在urls.py中加入url(r'^index/',index)



此时根目录的首页就创建成功了。



2、路由分发                    重点 *****

如果把一个项目中的所有功能都写到全局的urls.py里,不但乱而且耦合性太强。若一个程序出现BUG,则会导致整个项目无法运行。所以我们就要用到路由分发的功能。具体操作如下:

什么是分发?用一个形象的比喻:

例如:

      
一个班的作业要老师来检查,老师检查起来不但乱而且必须一个人一个人地对应,若有同学的作业做错了后,老师还得停下来为这位同学排错,其他同学必须等待,这样就很麻烦。

       为了解决以上问题,老师就安排了一些学习好的学生来当组长。每个组长都与各自的组员的一
一对应。假设有一个组里面的作业出现了问题,它不会影响其他组的正常检查。老师只需要和各个组长一 一对应即可。这个比喻就是分发。

       在django中,一个项目的全局的urls.py就不与每个用户一 一对应了,而是与每个应用中的urls.py一
一对应,每个应用中的urls.py与用户进行一 一对应。

具体操作如下:

(1)在django应用中创建urls.py

根据之前做的的项目中的应用名叫blog,我们在blog应用中创建一个叫urls.py的文件(相当于老师任命组长)



(2)让应用中的urls.py文件关联全局urls.py(路由分发)

接下来将这些“组长”— —对应“老师”全局的urls.py进行关联:

例如:给博客的项目写一个查阅功能。

 把实现查阅功能的代码写到blog应用的urls.py里,控制器urls.py里的注册、登陆这些与查阅功能的应用没有关系,所以还是在全局里面做配置

打开控制器urls.py添加这以下内容:

  第一行的调用模块命令中加上include

    from django.conf.urls import url,include



 

 (3)打开blog应用中的urls.py文件,将全局路由分发里的调用关系都拷贝进来



(4)最后在浏览器中进行测试,记住一定要加上blog应用的路径:

例如:127.0.0.1:8080/blog/2007/03



到这里MTVC中的C,也就是Controller(路由分配系统)已说完了。


六、视图函数之RENDER方法

 在视图函数views中一定要弄清楚两个核心的对象:

  http请求对象:HttpRequest

  http响应对象:HttpReponse(" ")      # 实例的字符串对象

每一个视图有以上两个对象。

1、请求request

request.method——确认请求方式

request.get——存放get数据,以字典的方式存储

get请求数据的形式是把数据放在url后面?:a=1&b=2这种形式存储

reuqest.post——存放post数据,以字典的方式存储

...

还有一些request.file、request.url等这里暂时用不到就先不细说了。


2、返回对象的方法

HttpResponse(" ")——实例字符串对象

render(" ")——模板渲染

如果render方法只是返回一个页面,那么就把这个页面里的字符串读出来,然后封装到HttpResponse里起来作为一个实例对象return就OK了。它做的最重要的一件事就是渲染模板。

 

怎么才能把从数据库里取出的数据内容的变量嵌入到想返回的页面上呢?


用之前我做过的显示当前时间的例子:



我们把t这个变量通过%s占位符嵌入到页面里了。这里因为只返回一个简单的显示时间字符串,所以没有问题,如果要返回给用户一个大的页面,这个里面会有很多要嵌入的数据,这里就不能用这种方式了,而用且了以上这种方式,会造成前端开发人员与后端开发人员开发时间不能并行,必须得等后端开发人员把数据从数据库取出来处理之后再交给前端处理,这就大大增加了开发的成本。所以为了避免这种方式开发,Django提供了一个叫模板的东西。

django中什么是模板?

答:模板是一种语言。

模板语言里只有两种语法:

(1)渲染变量:{ {   } }


(2)渲染模板:{%  %}


在模板语言里我们的目的只有一个——将后端的变量嵌入到html页面里面。

下面我们用一个例子来说明模板语言的作用与语法格式:

例:

做一个显示当前时间的项目升级版


 之前显示的时间的项目是用的是占位符的形式显示的,这次我要用模板语言来显示

(1)配置路径

redirect(" ")——跳转

The basic data of front-end and back-end interaction is string, render and
redirect just do some other processing, and finally they still need to use
string as the medium of transmission.

(3) redirect("")

RELATED SUGGESTION

 * Windows useful shortcut keys
 * Use of Chrome browser
 * gene splicing
 * Fold Change and t-distribution
 * Sequencing data quality control
 * 【Transfer】Detailed explanation of how to use GATK (including the use of bwa)
 * gene sequencing noun explanation
 * Python reads the file csv, first sorts by the 4th column, and then sorts by
   the value of the 5th column
 * The t-distribution is one-sided versus two-sided
 * os.popen(cmd).read() Get the result after execution with a newline
   character\n

POPULAR TAGS

360AI Online Tutorial

Original text

Rate this translation
Your feedback will be used to help improve Google Translate