others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

django快速入门案例

访问量:1415 创建时间:2020-01-09

注:安装过程,请查看前期文档,windows下操作过程与linux操作过程基本相同相同,ll命令用dir命令代替,如果本机电脑只安装了一个python版本python3命令可以用python代替

创建新的项目和app

项目目录通过django-admin.py startproject [project_name] 创建。 创建django-admin.py startproject mysite 项目。

[root@localhost ~]# django-admin startproject mysite
[root@localhost ~]# cd mysite/
#修改django使用mysql数据库,允许任意地址访问django服务ALLOWED_HOSTS = ['*']
[root@localhost mysite]# vim mysite/settings.py
#...省略部分输出...
ALLOWED_HOSTS = ['*']
DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myblog',
        'USER': 'myblog',
        'PASSWORD':'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
#...省略部分输出...

创建新的app名字叫myblog

[root@localhost mysite]# pwd
/root/mysite
[root@localhost mysite]# python3 manage.py startapp myblog
[root@localhost mysite]# ll
total 4
-rwxr-xr-x 1 root root 626 Jan  9 15:26 manage.py
drwxr-xr-x 3 root root 123 Jan  9 15:30 myblog
drwxr-xr-x 3 root root 108 Jan  9 15:30 mysite

目录说明

编写第一个视图函数

创建并编辑mysite/views.py,views.py是用于存放http请求处理逻辑函数的文件,例如访问网站www.example.com/hello,服务器具体的逻辑处理过程(数据库增删改查,用户登陆等)

[root@localhost mysite]# vim mysite/views.py 

from django.http import HttpResponse

def index(req):
    return HttpResponse("Hello, world.")

编写第一个urls.py路由

路由用于将http请求的url目录(例如www.example.com/hello的/hello)与views.py中的视图函数相对应的文件。

编辑mysite/urls.py文件,通过path('',views.index,name='index')将/目录与index函数对应,单引号''表示默认的/目录

from django.contrib import admin
from django.urls import path
from . import views      <--要增加的内容
urlpatterns = [
    path('',views.index,name='index'),  <--要增加的内容name='index'可以省略,这里name主要用于在模板中反向解析url。
    path('admin/', admin.site.urls),
]

运行django服务器

python3 manage.py runserver 0.0.0.0:80

访问页面 http://你的IP地址/

urls.py中path()函数的参数介绍

函数 path() 具有四个参数,两个必须参数:route 和 view,两个可选参数:kwargs 和 name。

使用模板

创建存放模板的目录,配置settings.py让django能够找到模板目录(可以有多个模板目录):

[root@localhost mysite]# pwd
/root/mysite
[root@localhost mysite]# mkdir templates
[root@localhost mysite]# vim mysite/settings.py
...其他内容省略...
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',
            ],
        },
    },
]
...其他内容省略...
#创建模板文件,并编辑内容如下:
[root@localhost mysite]# vim templates/index.html
<!DOCTYPE html>
<html>
<head>
<title>django</title>
</head>
<body>
<h3>url的name='index'反向解析如下</h3>
{% url 'index' %}
</body>
</html>

# 配置视图函数views.index
[root@localhost mysite]# vim mysite/views.py
from django.http import HttpResponse
from django.shortcuts import render  <--新增
def index(req):
    return render(req,'index.html')   <--新增
    #return HttpResponse("Hello, world.") <--注释

再次访问你的django服务地址, 访问页面 http://你的IP地址/ 可以查看页面发生了变化

编写django的第一个模型model

注意:这里在myblog目录下执行

创建并编辑myblog/models.py文件,添加如下内容:

#from django.db import models 引入基础类models,所有代表表结构的模型需要继承此类型例如class Programa(models.Model)
from django.db import models
# admin是django的后台管理模块,创建app的模型后,加入admin管理,我们可以从django后台编辑我们的数据(进行数据库的增删改查,再通过views展示到前端html页面)
from django.contrib import admin
#Programa用于文章的分类,每一个文章有自己的分类
class Programa(models.Model):
    name = models.CharField(max_length=60,unique=True,verbose_name='用于页面列表名称')
    detail = models.CharField(blank=True,max_length=360,verbose_name='细节说明')
    def __str__(self):
        return self.name
#文章的模型,
class Article(models.Model):
    title = models.CharField(max_length=160,unique=True,verbose_name='文章标题')
    content = models.TextField(max_length=50000,blank=True,verbose_name='文章内容')
    programa = models.ForeignKey(Programa,blank=True,on_delete=models.CASCADE,related_name='art_programa') #分类
    create_time = models.DateTimeField(null=True, blank=True, verbose_name='发布日期')
    read = models.IntegerField(default=0, verbose_name='阅读量')
    def short_content(self):
        if len(str(self.content))>1000:
            return '{}......'.format(str(self.content[0:1000]))
        else:
            return str(self.content)
    #def __unicode__(self):#python2使用__unicode__,python3使用__str__
    def __str__(self):
        return self.title
admin.site.register(Article)  #通过admin管理Article模型,不通过admin管理,在django后台无法对表进行增删改查
admin.site.register(Programa) #通过admin管理Programa模型

创建模型后需要将应用模型迁移到mysql数据库中,即在数据库中创建对应的model表结构

迁移应用模型

我们需要使用python3 manage.py makemigrations [appname] 和python3 manage.py migrate [appnem]命令进行app的模型迁移,appname可以省略表示迁移所有app,目前我们只有一个app(新app创建可以通过python manage.py startapp [new_app_name],可以通过python3 manage.py help makemigrations查看命令详细说明)。

app注册

编辑django的settings.py文件

[root@localhost mysite]# vim mysite/settings.py
...省略部分输出...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myblog',      #<--要添加的内容,也可以写成'myblog.apps.MyblogConfig',
]
...省略部分输出...

执行迁移命令

执行python3 manage.py makemigrations,生成数据库迁移文件

[root@localhost mysite]# python3 manage.py makemigrations
Migrations for 'myblog':
  myblog/migrations/0001_initial.py
    - Create model Programa
    - Create model Article

执行python3 manage.py migrate,将迁移文件中的sql同步到数据库中

root@localhost mysite]# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, myblog, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
...省略部分输出...
  Applying myblog.0001_initial... OK
  Applying sessions.0001_initial... OK

执行python3 manage.py showmigrations查看已经完成的迁移

[root@localhost mysite]# python3 manage.py showmigrations
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
myblog
 [X] 0001_initial
sessions
 [X] 0001_initial

可以看到已经迁移了5个app,其中admin、auth、contenttypes、sessions是django自带的后台、用户、app与model对应关系、session相关应用。

创建超级管理员

通过命令python3 manage.py createsuperuser创建超级管理员密码

[root@localhost mysite]# python3 manage.py createsuperuser
Username (leave blank to use 'root'): 
Email address: 
Password: 
Password (again): 
This password is too short. It must contain at least 8 characters.
This password is too common.
This password is entirely numeric.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

登陆后台 访问http://你的IP地址/admin,输入超级管理员密码, django安装在个人windows系统使用http://127.0.0.1/admin访问

编辑后台数据

在后台页面依次点击 Programa-->右上角ADD Programa,在表单中输入'django3' 和'django3技术文档' 点save.

创建第一篇博客文档 回到首页点击Articles -- ADD Articles ,创建新的博客文章。

django前端展示刚创建的博客文章

创建视图

[root@localhost mysite]# vim myblog/views.py
from django.shortcuts import render
from .models import Programa,Article
# Create your views here.

def art(req):
    progs=Programa.objects.all()
    art=Article.objects.all()[0]
    return render(req,'art.html',locals())

配置url.py

[root@localhost mysite]# vim mysite/urls.py
from django.contrib import admin
from django.urls import path
from . import views
from myblog.views import art    #<---新增内容
urlpatterns = [
    path('art',art,name='art'),    #<---新增内容
    path('',views.index,name='index'),
    path('admin/', admin.site.urls),
]

创建模板文件art.html,其中{{}}中是views函数中的对象,最后会被替换成对应的数据

[root@localhost mysite]# vim templates/art.html
<!DOCTYPE html>
<html>
<head>
<title>django</title>
</head>
<body>
<h3>{{art.title}}</h3>
<p>{{art.content}}</p>
<p>{{art.create_time}}</p>
</body>
</html>

访问页面http://你的IP/art

后续文章将详细介绍django的urls路由控制,models模型,template模板,auth用户认证,session,权限等内容。

登陆评论: 使用GITHUB登陆