django是python的web重量级框架,发展已经有10年多了,对应下面版本

Django 版本 Python 版本
1.8                       2.7, 3.2 , 3.3, 3.4, 3.5
1.9, 1.10                       2.7, 3.4, 3.5
1.11                       2.7, 3.4, 3.5, 3.6
2.0                       3.4, 3.5, 3.6, 3.7
2.1, 2.2                       3.5, 3.6, 3.7

安装

  pip install django==2.1  #以2.1为例,其他版本自行参考

  终端命令行测试:django-admin  #输出很多参数表示安装成功了

初步建立项目框架

  1.终端建立  

django-admin startproject 项目名称   #django-admin用来创建django项目工程

python manage.py startapp 子项目名称  #为项目子系统-用于用户管理,如user,app等
python manage.py runserver #启动项目
python manage.py runserver 0.0.0.0:8000  #对外访问端口

  2.pycharm建立

     打开pycharm右上角File->newproject ->选择Django

项目架构

常用配置文件修改

# setting.py
# Application definition INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user'#高版本会pycharm自动创建,需手动创建,作用是makemigrations时创建表结构时生效,如果不注册该模块,django不会加载,减少耦合性
] TEMPLATES = [ # html的路径
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'tempates')], # 配置好了以后django会自动来找html 文件
'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',
'dj_test.context_process.nav_title_process'
],
},
},
] DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
} # 如果要改成mysql的话把上面的换成下面mysql的配置
# 注django默认运行mysqldb,需启动mysql需在setting同级目录的init文件写入如下
import pymysql
pymysql.install_as_MySQLdb()
    # 'default': {
# 'ENGINE': 'django.db.backends.mysql', # 数据库引擎改为mysql
# 'NAME': 'db_name', # 数据库名称
# 'USER': 'db_user', # 用户
# 'PASSWORD': 'db_password', # 密码
# 'HOST': '127.0.0.1', # ip
# 'PORT': '3306', # 端口号
# }
} LANGUAGE_CODE = 'zh-Hans' # 语言 TIME_ZONE = 'Asia/Shanghai' # 中国时区,默认为标准时区 USE_I18N = True USE_L10N = True USE_TZ = False # 如果不改这个传到数据库中还是标准时区 # Static files (CSS, JavaScript, Images) #定义静态文件目录
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
) #上传文件路径
MEDIA_ROOT = '..'

django采用mtv模式,即model-template-view,和mvc模式差不多

  Django也是MVC框架。 但是,Django框架(内部的URLconf)作为控制器的角色,负责了接收用户请求和转发请求的工作,Django 里更关注的是模型(Model)、模板(Template)和视图(Views),故称之为 Django MVT 模式

  Django框架接收了用户请求和参数后,再通过正则表达式匹配URL,转发给对应视图进行处理。视图调用M处理数据,再调用T返回界面给浏览器

django模板渲染(非前后端分离)

# url.py
#配置路由
from django.contrib import admin
from django.urls import path
from user import views #指向view.py文件
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
]
# view.py
from django.shortcuts import render
# Create your views here.
def index(request):
dic = {'articles':articles}
return render(request,'index.html',dic) #request:相关请求,index.html返回模板,dic指定渲染的数据,dict形式,可以多加

context_process.py  #在setting的TEMPLATE配置了'dj_test.context_process.nav_title_process'

def nav_title_process(request):
'''上下文管理,这个自定义函数全局控制参数,在每次请求到来时都加载这些配置'''
title = 'rainbol的个人博客'
data = 'xxxxx,xxxx,xxxx'
content = {'data':navs,'title':title}
return content

base.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
{#由两个大括号组合里面包含的字段,在view.py文件给到,这儿进行渲染,{{}}===>渲染变量#}
<title>首页_{{ title }}</title>
{#block为模板继承的占位符形式实现,被继承者在其他文件引用该模板的css继承名会被替换#}
{% block css %}
{% endblock %} {% block js %}
{% endblock %} </head> <body>
<header class="header-navigation" id="header">
<nav><div class="logo"><a href="/">{{ title }}</a></div>
<h2 id="mnavh"><span class="navicon"></span></h2>
<ul id="starlist"> {#for标签允许在一个序列迭代,与for循环一样,通过.name或者.id取到对应的数据在页面显示#}
{% for nav in data %}
<li><a href="/nav/{{ nav.id }}">{{ nav.name }}</a></li>
{% endfor %} </ul>
</nav>
</header> {% block content %}
  <p>我是xx</p>
{% endblock content %}
{#为了增加可读性可以在endblock 后面也加content形成首尾互相#}
{# 当content主模板里面写了内容,我们到其他页面定义content时会把里面的p标签覆盖掉,不覆盖掉的做法是在其他页面的block content里加入{%block super%}表示加载父block里面的内容 #}
<a href="#" class="cd-top">Top</a>
</body>
</html>

index.html

{#模板继承 继承base.html#}
{% extends 'base.html' %} {#模板引擎,子模板和base.html的重载部分内容#}
{% block content %}
<h1>xxx</h1>
{% endblock %}
{% load static %}
{#加载load static后可以使用 static 加文件路径指定想要的文件,但这需要在setting.py配置静态资源路径#}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>你来哦了</title>
</head>
<body>
<img src="{% static 'images/1.jpg' %}" alt="">
</body>
</html>

forloop

{% for word in list %}
{{ forloop.counter }} {{ word }}{{ forloop.revcounter }}
{% endfor %}
{#计数器forloop.counter从1开始计数#}
{#计数器forloop.counter0从0开始计数#}
{#计数器forloop.first当前是否是第一次循环,返回布尔值#}
{#计数器forloop.last当前是否是最后一次循环,返回布尔值#}
{#计数器forloop.forloop.revcounter倒叙计数#}

csrf    ->加入csrf_token,让django在页面增加一个token信息,为了屏蔽只发post请求的用户,就是防止csrf跨域攻击,注意放在form表单里面

<form action="xxx">
{% csrf_token %}
<input type="text" name="user">
<input type="password" name="pwd">
<input type="submit">
</form>

版权声明:本文原创发表于 博客园,作者为 RainBol本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

初学Django基础01 建立工程,目录结构,常用配置,上下文管理,模板渲染的更多相关文章

  1. 基础知识(javaWeb工程目录结构)及各文件夹的作用

    在Eclipse中只要创建一个Dynamic Web Project,就可以根据创建向导创建出一个典型Java Web站点的目录结构.除非有特殊需要,在大多数情况下都没有必要修改这个目录结构,这也是W ...

  2. Django工程目录结构优化

    1.我看到这篇文章,写的不错,在此复制了一份,防止以后找不到! 感谢作者的翻译--->原文的链接:http://www.loonapp.com/blog/11/ 如果原文存在,请打开原文件阅读 ...

  3. IOS的工程目录结构和生命周期

    IOS的工程目录结构和生命周期 ·simple table文件夹:工程相关源代码和配置文件 BIDAppDelegate :    委托的声明和实现 BIDViewController:    视图控 ...

  4. Android工程目录结构

    ----------siwuxie095 首先创建一个简单的项目:MainActivity 工程目录结构一览: 工程目录结构介绍: 1.manifests目录 里面有一个AndroidManifest ...

  5. Ionic 3 项目的工程目录结构(转载)

    工程目录结构说明如下图

  6. Java Web工程目录结构

    说明 介绍java web 工程的基本结构目录.记录java web 工程结构的学习. Java web 结构 java web严格来说分为两类工程结构:一个是工程编译目录结构,一个是工程发布目录结构 ...

  7. [转]Java Web工程目录结构

    说明 介绍java web 工程的基本结构目录.记录java web 工程结构的学习. Java web 结构 java web严格来说分为两类工程结构:一个是工程编译目录结构,一个是工程发布目录结构 ...

  8. 说一说Android的工程目录结构

    这段时间正在学习有关Android的知识,对在Eclipse下开发的Android项目的目录结构有了一定的了解,在此对目录结构做一个简单的介绍.下图是在Eclipse下Android项目展开的项目目录 ...

  9. 【Django】基于Django架构网站代码的目录结构

     经典的Django项目源码目录结构 Django在一个项目的目录结构划分方面缺乏必要的规范.在Django的官方文档中并没有给出大型项目的代码建议目录结构,网上的文章也是根据项目的不同结构也有适当的 ...

随机推荐

  1. Windows 7安装Service Pack 1失败问题

    问题 很多朋友在电脑上安装某些软件时,会发现安装不了,提示信息大多是"本软件只支持 Windows 7 SP1 及更新版本"等等.这说明,你的电脑仍然在运行最早的Windows7版 ...

  2. Altera FPGA 远程升级有关的几个IP的使用

    在做在线远程升级的时候,一般需要两步:1.将数据写到外挂的flash中.2重新启动FPGA配置. 不过要做到远程升级,一般需要在原始程序中就考虑到加入远程升级模块,remote updata IP, ...

  3. redis使用bit做只有两种情况的“状态“统计(如是否在线的用户统计)

    1 记录在线用户数(活跃用户)? 比如redis中键a的value数据的二进制码是 0110 0110 0001 它总共有12位,在redis的位操作中,二进制中的第几位称为offset. 我们可以这 ...

  4. 如何创建Kafka客户端:Avro Producer和Consumer Client

    1.目标 - Kafka客户端 在本文的Kafka客户端中,我们将学习如何使用Kafka API 创建Apache Kafka客户端.有几种方法可以创建Kafka客户端,例如最多一次,至少一次,以及一 ...

  5. AspNetCore Redis实现分布式缓存

    分布式缓存描述: 分布式缓存重点是在分布式上,相信大家接触过的分布式有很多中,像分布式开发,分布式部署,分布式锁.事物.系统 等有很多.使我们对分布式本身就有一个很明确的认识,分布式就是有多个应用程序 ...

  6. Charles4.2.8抓包(http+https)

    Charles 和 Fiddler 一样都是http抓包工具. 之前用 Fiddler 抓个别 ios 手机 https 报文时总卡在哪里返不回任何数据,后来怀疑是 Fiddler 问题,就考虑使用  ...

  7. 单例DCL模式

    单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. 一般写法 public class DCLSingle { public static DCLSingle instance= n ...

  8. Keyboard Purchase CodeForces - 1238E (状压)

    大意: 给定串$s$, 字符集为字母表前$m$个字符, 求一个$m$排列$pos$, 使得$\sum\limits_{i=2}^n|{pos}_{s_{i-1}}-{pos}_{s_{i}}|$最小. ...

  9. VsCode中好用的git源代码管理插件GitLens

    1.在插件tab搜索GitLens 2.安装成功后将光标移至代码行即会显示代码编写者 3.在VsCode左侧菜单栏,点击GitLens图标即可查看History,也可以查看全部的日志 4.查看上下pu ...

  10. angularjs 中的路由 与 bootstrap标签选项卡的冲突 解决方案

    当项目中使用了angularjs 的路由,则所有 像a标签的href 的链接都会走路由,实现页面跳转,那么有些地方需要使用选项卡,就会带来麻烦. 路由使用如下图: 某页面需要使用bootstrap的选 ...