《Django By Example》pythonPython语言与信息数据获取和机器学习

Django入门基础(小白版))

2018-01-21  本文已影响38人  可汗爷爷

1.简介

ython下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。

Django是一个开放源代码的Web应用框架,由Python写成。

Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。

Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。

1.1学习本教程前你需要了解:

Django 版本对应的 Python 版本:


图片.png

2.安装Django(没安装python的自行安装)

这里环境选用python2.7+1.11

查看是否安装成功:进入解释器

import Django

查看版本:退出解释器,cmd中输入

python -m django --version

3.创建项目

django-admin startproject projectname

比如输入:django-admin startproject myblog

(可输入django-admin查看有django有哪些命令)

3.1启动项目:

django自带小型服务器

3.2目录结构

图片.png

4.创建应用

进入manage.py同级目录

python manage.py startapp blog#blog为应用名称

添加应用名到settings.py中的INSTALLED_APPS 里

INSTALLED_APPS = [
    ...
    'blog',
]

目录结构:


文件作用:

5.创建第一个页面(响应)

from django.http import HttpResponse
def index(request):
    return HttpResponse('hello jaymo!')
import blog.view as bv
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', bv.index),#新增

]

5.1启动服务

在manage.py同级目录下cmd中输入:

python manage.py runserver 9999

打开浏览器输入:

http://127.0.0.1:9999/index/

结果显示.png
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls')),
]

更改为^blog,地址以blog开头
在app目录下新建urls.py文件

from django.conf.urls import url
from .import views
urlpatterns = [
    url(r'^index//pre>, views.index),
]

正则表达式(RE)可为空(r'^/pre>),也可为固定的一个地址,注意index后的'/'

在浏览器地址栏中输入http://127.0.0.1:8000/blog/index/ 即可

6.开发一个template(界面)

template

是一个HTML文件
使用了Django模板语言(Django Template Language,DTL)(引擎)
可以使用第三方模板(如Jinja2)

步骤

def index(request):
    return render(request, 'index.html')
图片.png

DTL初步使用

views.py文件中render()函数中支持一个dict类型参数
该字典是后台传递到模板的参数,键为参数名

return render(request, 'index.html',{'hello':'hello jaymo blog'})

在模板Templates/index.html中使用{{参数名}}来使用

<body>
<h1>{{hello}}</h1>
</body>

图片.png
此处有坑
此时再新建一个app,此目录下Templates中的html界面命名与之前app一样,则django会按照installed_app中的顺序查找,以至于会忽略掉新建的template

解决办法:将app的Templates目录下创建与app同名的目录
将html文件放入该目录中,同时更改views.py文件中的render()第二个参数

7.Models

ORM:
实现了ORM(对象关系映射)
实现了对象和数据库之间的映射
隐藏了数据访问细节(封装了数据库的操作,不用写SQL语句)

title = models.CharField(max_length = 32,default = 'title')
content = models.TextField(null = True)

详情查看官方网站:https://docs.djangoproject.com/en/1.10/ref/models/fields/

生成数据表

步骤

CREATE TABLE "blog_article" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(32) NOT NULL, "content" text NULL);

查看db.sqlite3的第三方软件:
SQLite Expert personal
轻量级,完全免费

8.页面呈现数据

from. import models

article = models.Article.objects.get(pk=1)
return render(request, 'blog/index.html', {'article': article})

注意:这里是应用了配置url方法二。
前端步骤
index.html模板可直接使用对象以及对象的"."操作

<body>
<h1>{{article.title}}</h1>
<h3>{{article.content}}</h3>
</body>

9.Admin

简介

配置

localhost:9999/admin
登录admin:


图片.png

配置应用(增加数据库管理)
在应用下admin.py中引入自身的models模块(或里边的模型类)

from models import Article

编辑 admin.py:
admin.site.register(models.Article)

admin.site.register(Article)

图片.png

添加Articles:

图片.png
访问http://localhost:9999/blog/index/
图片.png

修改数据默认显示名称

def __unicode__(self):(python 2.X)
        return self.title

or

def __str__(self):(python 3.X)
        return self.title
图片.png

10.完善博客

博客页面设计
页面概要

10.1 博客主页面

主页面内容

列表编写思路

实现思路
模板For循环
{% for xx in xxs %}
HTML语句
{%endfor %}

具体实现
后台代码,修改views.py

def index(request):
    articles = models.Article.objects.all()
    return render(request, 'index.html', {'articles': articles})

前端代码,修改index.html

<h1><a href="">新建文章</a></h1>
{% for article in articles %}
    <a href="">{{article.title}}</a>
    <br>
{% endfor %}

图片.png

博客文章界面
编写思路

具体实现:
在views.py中增加一个响应

def article_page(request, article_id):
    article = models.Article.objects.get(pk=article_id)
    return render(request,'blog/article_page.html',{'article':article})
url(r'^article/(?P<article_id>[0-9]+)$', views.article_page),

编写界面,在index.html同级目录下新建article_page.html文件:

<body>
    <h1>{{article.title}}</h1>
    <br/>
    <h3>
        {{article.content}}
    </h3>
    <br/><br/>
    <a href="">Edit</a>
   </body>

浏览器输入 http://127.0.0.1:9999/blog/article/1验证

图片.png

超链接配置
超链接目标地址

其中app_name和url_name都在url中配置

再配URL

url(r'^article/(?P<article_id>[0-9]+)$',
        views.article_page, name='article_page'),

主要取决于是否使用include引用了另外一个url配置文件

    <a href="{% url 'blog:article_page' article.id%}">{{article.title}}</a>

博客撰写页面

页面内容

实现

新建页面edit_page.html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Edit Page</title>
</head>
<body>
<form action="" method="post">
    <label for="">
文章标题:<input type="text" name="title">
    </label>
<label for="">
文章内容:<input type="text" name="content">
</label>
<input type="submit" value = "提交>
</form>
</body>
</html>

表单编辑响应函数
使用request.POST['参数名']获取表单数据,使用models.Article.objects.create(title, content)创建对象,写入数据库,然后返回主页:

def edit_action(request):
    title = request.POST.get('title', 'TITLE')
    content = request.POST.get('content', 'CONTENT')
    models.Article.objects.create(title=title, content=content)
    articles = models.Article.objects.all()
    return render(request, 'blog/index.html', {'articles': articles})

图片.png

如果出现这个页面,在edit_page.html表单中添加:{% csrf_token%}

博客修改页面
思路

来源:https://www.imooc.com/learn/790

上一篇下一篇

猜你喜欢

热点阅读