zoukankan      html  css  js  c++  java
  • Django学习笔记之入门

    • 创建django项目
    • 创建app目录
    • 静态文件以及模板路径的配置
    • 第一个django程序
    • 模板渲染入门

    一、创建django项目

    首先执行pip3 install django,接下来有两种方式创建django项目:

    第一种是在命令行中执行:django-admin startproject 工程名

    第二种是直接使用pycharm,在新建项目的时候选择django,这种方式创建django项目的时候需要选择一个空目录

    而且pycharm需要安装专业版的,社区版是没有这个功能的。

    一个完整的django项目的目录结构如下:

    项目名

     --------项目名

              -----  __init__.py

              ------settings.py#配置文件

              ------url.py#URL对应关系

              ------wsgi.py

    ---------manage.py#管理Django程序

    ---------static(自己创建的)#存放css,js等静态文件

    --------templates#存放html等模板文件

    --------db.sqlites#存放数据库信息

    二、创建APP

    因为一个django工程里面可能包括了很多子功能,所以可以在根目录下建立多个app目录

    建立app的方式:python manage.py startapp app的文件名称

    一个完整的app的目录结构如下:

    app文件名

    --------migrations #存放数据库的表结构的更改信息

    --------__init__.py

    -------__admin__.py #Django提供的后台管理

    ------apps.py#配置当前的app

    ------models.py#ORM,写制定类,通过命令创建数据库结构

    ------tests.py#单元测试

    ------views.py #业务代码

    三、静态文件以及模板路径的配置

    在编写第一个django程序之前,首先需要在django项目的同名目录下的settings.py进行以下配置:

    1、配置模板的路径:

    TEMPLATES = [
                    {
                        'BACKEND': 'django.template.backends.django.DjangoTemplates',
                        'DIRS': [os.path.join(BASE_DIR, 'templates')],
                        'APP_DIRS': True,
                        'OPTIONS': {
                            'context_processors': [
                                'django.template.context_processors.debug',
                                'django.template.context_processors.request',
                                'django.contrib.auth.context_processors.auth',
                                'django.contrib.messages.context_processors.messages',
                            ],
                        },
                    },
                ]

    2、配置静态目录:

    static
        
            STATICFILES_DIRS = (
                os.path.join(BASE_DIR, 'static'),
            )

    配置好静态目录之后,在模板的html文件中就可以引入静态目录中的css文件,如下:

    <link rel="stylesheet" href="/static/commons.css" />

    需要注意的是,最好文件的存放路径就不要变,然后就按照上面这样子写就不会错。

    四、第一个django程序

    首先需要在django同名目录下的url.py中定义路由,url(url路径,views中对应的函数名)

    然后需要在url中导入views,例如:

    from django.contrib import admin
    from django.conf.urls import url
    from cmdb import views
    
    urlpatterns = [
        # path('admin/', admin.site.urls),
        url('admin/',admin.site.urls),
        url('login/',views.login),
        url('home/',views.home)
    ]
    

    接下来需要在app下的views.py中根据具体的业务逻辑定义视图函数,参数request是必须的,request中封装了很多东西

    简要介绍一下:

    ①通过request.method可以知道页面提交的方式是get还是post

    ②如何获取数据:

    如果页面是通过get提交的,例如用户在地址栏中输入?nid=123&name=alex,那么可以通过reques.GET.get('',None)获取请求发来的数据

    如果页面是通过post提交的,也可以通过request.POST.get('',None)获取提交的表单中的信息

    3、如何把数据渲染到页面:

    # return HttpResponse("字符串")
    # return render(request, "HTML模板的路径")
    # return redirect('/只能填URL')

     四、模板渲染

    1、{{变量名}}

    在html文件中: 

    <body>
          <div>{{current_user}}</div>
    </body>
    				
    		
    

    对应的视图函数中,需要在return的时候使用render方式返回,在里面传入一个变量,并赋值:

    def func(request):
         return render(request, "index.html", {'current_user': "alex"})
    

    以上的代码执行结果就等价于:

    				<html>
    				..
    					<body>
    						<div>alex</div>
    					</body>
    				
    				</html>
    

    2、使用for循环,if等进行模板渲染

    使用{% for n in 变量名%}开始,使用{%endfor%}结束,使用{%if ...%}开始,{endif}结束

    html文件中的内容:

    <html>
    				..
    	<body>
    		<div>{{current_user}}</div>
    						
    			<ul>
    				{% for row in user_list %}
    							
    				{% if row == "alex" %}
    				<li>{{ row }}</li>
    				{% endif %}
    								
    				{% endfor %}
    			</ul>
    						
    	</body>
    				
    </html>
    

    3、获取数组或者字典中的某个变量(***)

    view视图函数中定义了几种变量:

    def func(request):
          return render(request, "index.html", {
    		'current_user': "alex", 
    		'user_list': ['alex','eric'], 
    		'user_dict': {'k1': 'v1', 'k2': 'v2'}})
    

    注意一下如何获取user_list中的第一个值,或者user_dict中的K1对应的值这种获取方式(用点的方式,和vue.js很像):

    <html>
    				..
    					<body>
    						<div>{{current_user}}</div>
    						
    						<a> {{ user_list.1 }} </a>
    						<a> {{ user_dict.k1 }} </a>
    						<a> {{ user_dict.k2 }} </a>
    						
    </html>				        </body>
    

    另外一个结合for循环的例子:

    render(request, "模板的文件的路径", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': '张扬','age': 73}})
    

    如何循环输出k2里面的每一个key,value

                    {% for row in k2.keys %}
    			{{ row }}
    		{% endfor %}
    		
    		{% for row in k2.values %}
    			{{ row }}
    		{% endfor %}
    		
    		{% for k,v in k2.items %}
    			{{ k }} - {{v}}
    		{% endfor %}
    		
    

      

     

      

     

  • 相关阅读:
    java依赖注入
    Mac OS 中的 Python(和 NumPy)开发环境设置
    英语巴菲
    经济学原理
    You are beautiful
    大数据之tachyon(未完版)
    机器学习温和指南
    机器学习之回归
    Mac 命令
    批处理--批量打开程序&批量关闭程序
  • 原文地址:https://www.cnblogs.com/mesunyueru/p/9107701.html
Copyright © 2011-2022 走看看