博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django框架(五)---- app组件
阅读量:5322 次
发布时间:2019-06-14

本文共 3433 字,大约阅读时间需要 11 分钟。

Django框架(五)


 App组件:

我们使用:python manage.py startapp app-name 命令创建app,可得到如下结构的目录: 

1 appname2  |___migrations3  |     |_ __init__.py4  |_ __init__.py5  |_ admin.py6  |_ apps.py7  |_ models.py8  |_ tests.py9  |_ views.py

 


 

一、models.py:模型层

  在models.py文件中,需要去创建你的模型类,继承自models.Model类,包含了Django和数据库之间数据的基本字段和行为,每个模型类映射到数据库形成一张数据表,例如:

1 from django.db import models2 3 class Users(models.Model):4     name = models.CharField(max_length=32)5     age = models.IntegerField(default=20)6     phone = models.CharField(max_length=16)

  在上述例子中,定义了一个Users类,类中包含三个对象,这三个对象名映射到数据库表,为表的字段名;后面定义了这三个对象的数据类型Field以及限定。

   Field字段类型通常常用的有:1、CharField:字符串,必须有参数 max_length规定长度;

               2、IntegerField:整数;

               3、FileField:文件上传字段;

               还有很多,具体可查阅

  在建立了空数据库,并且在settings.py中设置好DATABASES,然后创建好需要的model类,即可使用命令:

1 python manage.py makemigrations2 python manage.py migrate

  来让Django生成数据库表,得到:

    (图片为MySQL数据库表)

 

  但是:一般是首先创建数据库表,需要的字段,属性,主键等都设置完全后,再创建model类,因为Django自动生成的数据表,其中属性有些不尽人意。

  一般表的名称是  appname_表名,如果是外来导入的数据表,则可以使用代码,指定真实表名:

1 class Districts(models.Model):2     name = models.CharField(max_length=270, default='NULL')3     parent_id = models.IntegerField(max_length=5, default='NULL')4     order = models.IntegerField(max_length=2, default='NULL')5 6     class Meta:7         db_table = 'district'  # 指定真实表名

 

 

 

 


 

二、urls.py:子路由

  将project/urls.py文件复制一份到app目录下;

  在其中书写规则,分析从总路由project/urls.py分配过来的关于该app的请求,然后推送给相应的视图层函数,进行处理并返回一个响应;

  例子:

1 from django.conf.urls import url2 3 from . import views4 5 urlpatterns = [6     url(r'^$', views.index, name='index'),7 ]

 

  1、首先导入视图文件:views.py

  2、因为是总路由分配过来的请求,则这些请求的URL,前面必定是:IP:PORT/appname 结构

  3、url()函数第一个参数:正则表达式,根据请求URL的appname后面的结构进行匹配;

         第二个参数:代表匹配成功后,触发views模块中的index函数;

           第三个参数:命名,涉及到后面的模板层,省事;

  4、有多少视图层操作,就写多少个url函数;


 

三、views.py:视图层

  views.py文件,接收Web请求并且返回Web响应,这个响应可以是HTML内容,重定向或404,甚至是其他东西;

  直接上例子:

1 from django.http import HttpResponse2  3 def index(request):4 4     return HttpResponse("Hello World! ")

   1、导入django.http模块的HttpResponse函数;

    每写成的视图函数都负责实例化,需要填充并且返回一个函数;

      可返回:HttpResponse:返回一段内容,如上述例子的字符串等等,status=200

          HttpResponseNotFound:返回未找到网页错误,status=404

          Http404:也可以实现HttpResponseNotFound的效果

          HttpResponse(status=404):可以设置status值,实现404效果

          等等等等。。。。

    可查看中的响应函数

   2、编写函数index,返回一个"Hello World! "的响应;

   3、这是最简单的一个视图,按照之前设置好的app/urls.py子路由文件,运行Django服务,浏览器 IP:PORT/appname 即可显示"Hello World! "

 


 

 四、templates:模板层

  实际应用过程中,Django服务根据请求调取数据库数据,处理数据并且返回相应的HTML,因此需要动态的创建HTML文件,将处理后的数据填充其中,响应在浏览器;

  模板包含一部分所需HTML输出的静态部分,以及一部分描述如何插入动态内容的特殊语法;

  因此,需要在与manage.py同一级的目录中创建一个templates目录,在templates目录中,每个app创建以app-name命名的文件夹,在app-name文件夹内,放置该app使用到的模板HTML文件

  变量:写法:{

{ 变量名 }}

     要求:变量名由字母数字字符和下划线(' _ ')任意组合,不能有空格或者标点符号

     方法:使用点(' . ')来访问变量的属性,如 {

{ variable.id }} 访问id属性

  过滤器:写法:{

{ 变量名|条件 }}

         可以参看共60多个

  标签:写法:{% tag %}

        一些标签还需要结束标签,{% tag %} 。。。{% endtag %}

        可以参看

     常用标签:1、for标签:

            例子:

1 {% for v in user_list %}2     3         {
{ v.id }}4 {
{ v.name }}5 {
{ v.age }}6 {
{ v.phone }}7 8{% endfor %}

             2、if,elif,else标签:

1 {% if athlete_list %}2     Number of athletes: {
{ athlete_list|length }}3 {% elif athlete_in_locker_room_list %}4 Athletes should be out of the locker room soon!5 {% else %}6 No athletes.7 {% endif %}

  注释:写法:{#   #}   中间的值不会显示

  模板继承:待定 

  

  

 

 

 

 

转载于:https://www.cnblogs.com/lambs/p/9175492.html

你可能感兴趣的文章
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
查看>>
poj2388---求奇数个数字的最中间的数
查看>>
对闭包的理解
查看>>
java.lang.OutOfMemoryError异常解决方法
查看>>
Css让文字自适应Table宽度[转]
查看>>
[Javascript] Flattening nested arrays: a little exercise in functional refactoring
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
使用maven构建多模块项目,分块开发
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
jffs2镜像制作
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
C#高级编程笔记(一)
查看>>
Code Snippet
查看>>
MFC模态对话框程序不响应OnIdle
查看>>