django 基础及应用

django 基础及应用

django 项目创建及基本设置

创建项目

  • 打开命令行提示符,找到虚拟环境文件夹里面的 Script 文件夹,输入命令 activate 进入虚拟环境
  • 在虚拟环境下进入项目文件夹,输入命令 django-admin startproject test ,创建名为 test 的项目
  • 进入项目文件夹,输入命令python manage.py startapp student,在项目里创建名为 student 的应用
    创建完成后我们可以查看下项目的目录结构:
$ cd HelloWorld/
$ tree
.
|-- test
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
`-- manage.py

目录说明:
- test: 项目的容器。

  • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。

  • test/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。

  • test/settings.py: 该 Django 项目的设置/配置。

  • test/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站”目录”。

  • test/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

配置项目

  • 使用 pycharm 打开项目,并将环境改为我们配置好的虚拟环境
  • 打开主项目 test 里面的 setting.py 文件,找到里面的INSTALLD_APPS 项,加入应用 student,代码如下:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'student' # 加入student应用
]
  • 在总工程项目文件夹下创建名为 templates 的文件夹,用于存放我们的html模板,模板里面是我们数据和视图的展示
  • 回到 setting.py 文件,找到 TEMPLATES 项的 'DIRS',加入路径,代码如下:
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',
            ],
        },
    },
  • 找到 DATABASES 项修改代码如下 :
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',    # 对应数据库里数据库名
        'HOST': 'localhost',    
        'USER': 'root',
        'PASSWORD': '123456',
        'PORT': '3306',
    }
}
  • 打开主项目 test 的 init.py 文件,输入代码如下:
import pymysql

pymysql.install_as_MySQLdb()

通过以上操作,我们已经完成了一个不加图片的django项目的配置。

django 模型

进入应用 student 中的 models.py 文件,代码如下:

class Student(models.Model):
    stu_id = models.AutoField(primary_key=True)
    stu_name = models.CharField(max_length=10)
    stu_sex = models.BooleanField()
    class Meta:
        db_table = 'student'

在这里我们创建了一个学生对象,并为其定义了三条属性,下面介绍一下常用的模型字段:

模型字段

  • CharField:字符串
    max_length:长度

  • BooleanField:布尔类型

  • DateField: 年月日,日期
    auto_now_add: 第一次创建的时候赋值
    auto_now:每次修改的时候赋值

  • DateTimeField:年月日 时分秒
    auto_now_add
    auto_now

  • AutoField:自动增长

  • DecimalField(max_digits=3, decimal_places=1)
    max_digits:总位数
    decimal_places:小数后多少位

  • TextField:存文本信息

  • IntegerField:整数

  • FloatField:浮点

  • FileField:文件上传字段

  • ImageField:上传图片
    upload_to=”” 指定上传图片的路径

模型参数

default: 默认
null :设置是否为空,针对数据库中该字段是否可以为空
blank :设置是否为空,针对表单提交该字段是否可以为空
primary_key:创建主键
unique:唯一

创建了模型之后,我们将其提交到数据库,打开pycharm下方的控制台 Terminal 或者在命令行提示符进入虚拟环境后进入项目,输入命令

python manage.py makemigrations   # 让django知道我们的模型变更
python manage.py migrate   # 创建表结构

这样我们就在数据库里面创建了项目的相关数据表

视图和URL配置

test 目录下的 test 目录找到 urls.py 文件,并输入代码:

from django.conf.urls import url, include  # 添加include方法
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'student/', include('stu.urls')),
]

接下来我们在 student 应用文件夹下创建名为 urls.py 的文件,进入文件添加代码如下:

from django.conf.urls import url
from student import views

urlpatterns = [
    url(r'addstu/', views.add_stu),
    url(r'showstu/', views.show_stu)
]

url() 函数

Django url() 可以接收四个参数,分别是两个必选参数:regexview 和两个可选参数:kwargsname,接下来详细介绍这四个参数。

  • regex: 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。

  • view: 用于执行与正则表达式匹配的 URL 请求。

  • kwargs: 视图使用的字典类型的参数。

  • name: 用来反向获取 URL。

Django 模板

我们在 templates 目录下创建 addStu.html 文件并进入,添加代码如下:

<body>
    <form action="/student/addstu/" method="post">
        <input type="text" name="name">
        <input type="text" name="sex">
        <input type="date" name="birth">
        <input type="submit" value="提交">
    <form>
<body>

templates 目录下创建 showStu.html 并进入,添加代码如下:

{% for stu in stus %}
    id: {{ stu.stu_id }} <br>
    姓名:{{ stu.stu_name }} <br>
    性别:{% if stu.stu_sex %}{% else %}{% endif %} <br>
       <br>
{% endfor %}

然后在 student 目录下找到 views.py 文件并进入,添加代码如下:

def add_stu(request):
    # 添加学生信息
    if request.method == 'GET':
        return render(request, 'addStu.html')
    if request.method == 'POST':
        # 处理提交的学生信息
        stu_id = request.POST.get('id')
        stu_name = request.POST.get('name')
        if request.POST.get('sex') == '男':
            stu_sex = 1
        else:
            stu_sex = 0

        # objects 对象
        # 通过模型来获取学生,向数据库中输入数据
        Student.objects.create(
            stu_id=stu_id,
            stu_name=stu_name,
            stu_sex=stu_sex,
        )
        return HttpResponse('添加学生信息成功')

def show_stu(request):
    stus = Student.objects.all()
    # 选择所有学生信息,并将信息返回给网页输出
    return render(request, 'showStu.html', {'stus': stus})

接下来我们进入 test 目录输入以下命令,启动服务器:

python manage.py runserver 0.0.0.0:8000

0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000。

访问 http://127.0.0.1:8000/student/addstu/ ,可以看到页面:
这里写图片描述

这样我们就完成了使用模板来输出数据,从而实现数据与视图分离。我们可以在页面录入信息并提交到数据库的对应表中,接下来我们详细介绍模板中常用语法规则。

Django模板标签

if/else标签
基本语法格式如下:

{% if condition %}
     ... display
{% endif %}

或者:

{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

根据条件判断是否输出。if/else 支持嵌套。

{% if %} 标签接受 andor 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ) 。

for 标签
{% for %} 允许我们在一个序列上迭代。

与Python的 for 语句的情形类似,循环语法是 for X in Y ,Y是要迭代的序列而X是在每一个特定的循环中使用的变量名称。

每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。

上面 showStu.html 里面的代码很好的展示了两个标签的用法

注释标签
Django 注释使用{# #}。

{# 这是一个注释 #}

或者:

{% comment %}
    这是一个注释
{% endcomment %}

过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:

{{ name | lower}}

{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写。过滤管道可以被 套接 、,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:

{{ my_list|first|upper }}

以上实例将第一个元素并将其转化为大写。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值