django打包的作用_Python 之 Django 的入门(下)

前文:从上期的推文中,想必大家学习到了 Django 中一些常规的操作,接下来我们继续介绍 Django 的内容

一、简介

Django 作为一个 Python 的高级 Web 框架,功能非常强大,其自身封装了大量底层逻辑,并实现了 ORM,同时,MVT 结构保证了代码结构的完整性,这一切给了开发人员巨大的便利,让 Web 开发变得高效且简洁。课程将以一个极简的博客网站为例,带领大家充分领略 Django 的魅力。

二、本课程能学到什么?

  1. 搭建完整的 Django 开发环境。

  2. 创建项目及应用。

  3. 了解项目目录下各文件的含义和作用。

  4. 了解并学会开发 Templates。

  5. 了解并学会开发 Models。

  6. 掌握 Admin 的基本配置方法。

  7. 学会项目 URL 的配置方法。

三、开始学习吧

3.5 Admin

Admin 是 Django 自带的一个功能强大的自动化数据管理界面,被授权的用户直接在 Admin 中管理数据库。Django 提供了许多针对 Admin 的定制功能。

打开命令行,输入: python manage.py createsuperyser 创建超级用户,创建名字和密码即可。(密码最好是字母加数字两种以上的字符,否则太简单会创建失败)

3305815bb53bf500f68b5091f955f4aa.png

Admin 的入口是:localhost:8000/admin/

在应用下的 admin.py 中引入自身的 models 模块。

from django.contrib import adminfrom blog import modelsclass ArticleAdmin(admin.ModelAdmin):    list_display = ("title","content","pub_time")    list_filter = ("pub_time",)admin.site.register(models.Article)

进入 Admin 的登录页面,输入刚刚创建的名字和密码。

a1cce48772b9f4f76640148101a473fd.png

Django 管理页面如下:可对博客进行增加修改。

180f2d54846563960fd7e6663ca75392.png

点击 article 进入编辑页面,可以看到在 models.py 中写的title、content、pub time。

6dd0f92a9eb5126be361ecdf498a582b.png

还能添加博客,标题内容时间编辑。

8f14302673f3c5fec24ec6158f3ad851.png

3.6 博客主页面开发

      首先明确博客页面需要什么?

  1. 博客主页面

  2. 博客文章内容页面

  3. 博客撰写页面

3.6.1博客主页面

      在主页面中我们需要什么呢?

  1. 文章标题列表(超链接)

  2. 发表博客按钮(超链接)

首先取出数据库中所有文章对象,其次将文章对象们打包成列表,传递到前端。然后前端页面把文章以标题超链接的形式逐个列出。重点在于怎么循环文章列表。

for 循环语句:

{% for xx in xxs %}

中间内容 

{% endfor %}

打开 views.py 更改 index 函数 get 改为 all,就能拿到所有的文章标题。

from django.shortcuts import renderfrom django.http import HttpResponsefrom . import modelsdef index(request):articles = models.Article.objects.all()return render (request,'index.html',{'articles':articles})打开 index.html 更改<html><head>    <meta charset="UTF-8">head><body><h1><a href = "">++添加新文章++a>h1>{% for article in articles %}<a href = "">{{ article.title }}a><br/>{% endfor %}body>html>

打开命令行,进入项目中,输入: python manage.py runsever 可运行项目。

3.6.2 博客文章内容页面

这个页面内容有三点:

  1. 文章标题 

  2. 文章内容 

  3. 修改文章按钮(超链接)

创建新的 article_page.html 文件。

<html><head>    <meta charset="UTF-8"><title>Article Pagetitle>head><body><h1>{{ article.title }}h1><br/><h3>{{ article.content }}<h3><br/><br/><a href = "">修改文章a>body>html>

打开 views.py 创建 article_page 函数,除了 reques 参数,还要添加一个 article_id 的参数作为文章标题。函数要获取通过主页面点击的文章,通过文章标题来分辨需要获取哪篇,然后返回 html 页面。

def article_page(request,article_id):    article = models.Article.objects.get(pk = article_id)    return render(request, 'article_page.html',{'article': article})

打开应用下的urls.py添加url。(?P[0-9]+)把正则表达式匹配到的数字,以article_id为组名匹配。

from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^index/$',views.index),url(r'^article/(?P[0-9]+)$',views.article_page),]

那么在 Django 页面如何写超链接呢?

{% url 'app_name:url_name' 地址参数 %}

其中app_name和url_name在url中配置的

url的名称参数:

97f35dfc5f193aa5f5243e3665bfb41b.png

先打开 myblog 目录下的 urls.py,在后面添加 namespace。

url(r'^blog/',include('blog.urls',namespace='blog')),

然后打开应用目录下的 urls.py ,添加 name 。

from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^index/$',views.index),url(r'^article/(?P[0-9]+)$',views.article_page,name='article_page'),]

打开 index.html 添加 url

<html><head>    <meta charset="UTF-8">head>    <body>    <h1><a href = "">++添加新文章++a>h1>    {% for article in articles %}    <a href = "{% url 'blog:edit_page' 0 %}">{{ article.title }}    a>    <br/>    {% endfor %}body>    html>

运行页面后点击文章标题可以看到文章内容。

3.6.3 博客撰写页面

这个页面的主要内容有:

  1. 标题编辑栏

  2. 文章内容编辑区域

  3. 提交按钮

首先创建一个新的 edit_page.html 文件

<html><head>    <meta charset="UTF-8">    <title>Edit Pagetitle>head><body><form action="{% url 'blog:edit_action' %}" method="post" >{% csrf_token %} #安全防范    <label>文章标题      <input type="text" name="title" value="{{ article.title }}"  />    label>    <br/>    <label>文章内容      <input type="text" name="content" value="{{ article.content }}"  />    label>    <br/>    <input type = "submit" value = "提交">form>body>html>

切换 views.py 添加 edit_page 函数和 edit_action 函数

def edit_page(request,article_id):    if str(article_id) ==  '0':        return render(request,'edit_page.html')    article = models.Article.objects.get(pk = article_id)    return render(request, 'edit_page.html',{'article': article}) def edit_action(request):    title = request.POST.get('title','TITLE')    content = request.POST.get('content','CONTENT')    article_id = request.POST.get('article_id','0')    if article_id == '0': #如果article_id为0       models.Article.objects.create(title=title, content=content)       articles = models.Article.objects.all()       return render(request, 'index.html',{'articles':articles})    article = models.Article.objects.get(pk = article_id)    article.title = title    article.content = content    article.save() #修改数据后保存    return render(request, 'article_page.html',{'article':article})
7ab9a2f93e95ff0e41565f729deb12bb.png

切换到应用目录下 urls.py,添加 url

url(r'^edit/(?P[0-9]+)$',views.edit_page,name='edit_page'),url(r'^edit/action$',views.edit_action,name='edit_action'),

edit_page 函数注意事项:添加编辑文章的按钮思路与添加文章类似,但是新文章为空,修改文章有内容。修改页面有文章有对象,所以我们用已创建的文章 ID 来添加按钮。

简易的博客就这样做好啦,自行设计前端让博客变得好看吧!在这里给出全部代码进行参考。

根目录下的 urls.py

from django.contrib import adminfrom django.conf.urls import url,includefrom blog import viewsurlpatterns = [    url(r'^$',views.home),    url(r'^admin/', admin.site.urls),    url(r'^blog/',include('blog.urls',namespace='blog')),]

应用目录下 admin.py

from django.contrib import adminfrom blog import modelsclass ArticleAdmin(admin.ModelAdmin):    list_display = ("title","content","pub_time")    list_filter = ("pub_time",)admin.site.register(models.Article,ArticleAdmin)

应用目录下 models.py

from django.db import modelsimport django.utils.timezone as timezoneclass Article(models.Model):    title = models.CharField(max_length=200,unique = True)    content = models.TextField(max_length=2000)    pub_time = models.DateTimeField(default = timezone.now)    def __str__(self):       return self.title

应用目录下 urls.py

from django.conf.urls import urlfrom . import viewsapp_name ='blog'urlpatterns = [    url(r'^index/$',views.index,name='blog'),    url(r'^article/(?P[0-9]+)$',views.article_page,name='article_page'),    url(r'^edit/(?P[0-9]+)$',views.edit_page,name='edit_page'),    url(r'^edit/action$',views.edit_action,name='edit_action'),  ]

应用目录下 views.py

def index(request):    articles = models.Article.objects.all()    comments = models.Comment.objects.all()    return render(request,'index.html',locals())def home(request):    return render(request,'home.html')def article_page(request,article_id):    article = models.Article.objects.get(pk = article_id)    return render(request, 'article_page.html',{'article': article})def edit_page(request,article_id):    if str(article_id) ==  '0':        return render(request,'edit_page.html')    article = models.Article.objects.get(pk = article_id)    return render(request, 'edit_page.html',{'article': article})def edit_action(request):    title = request.POST.get('title','TITLE')    content = request.POST.get('content','CONTENT')    article_id = request.POST.get('article_id','0')    if article_id == '0':        models.Article.objects.create(title=title, content=content)        articles = models.Article.objects.all()        return render(request, 'index.html',{'articles':articles})    article = models.Article.objects.get(pk = article_id)    article.title = title    article.content = content    article.save()    return render(request, 'article_page.html',{'article': article})

index.html

<html><head>    <meta charset="UTF-8">    <title>Diarytitle>head><body><a  href="{% url 'blog:edit_page' 0 %}">+添加新文章+a><br /><br />{% for article in articles %}<a  href="{% url 'blog:article_page' article.id %}">{{ article.title }}a><br /> {% endfor %}body>html>

article_page.html

<html><head>    <meta charset="UTF-8">    <title>文章title>head><body>    <h1>{{ article.title }}h1>    <br />    <h1>{{ article.content }}h1>    <br /><br /><a href="{% url 'blog:edit_page' article.id %}" type="submit" >修改文章a><a href="{% url 'blog:blog' %}" type="submit"> 返回主页a>body>html>

edit_page.html

<html><head>    <meta charset="UTF-8">    <title>新文章title>head><body>    <form action="{% url 'blog:edit_action' %}" method="post">    {% csrf_token %}       <input type="hidden" name="article_id" value="{{ article.id | default:"0"}}" />         <label>文章标题         <input type="text" name="title" value="{{ article.title }}" />          label><br>          <label>文章内容          <input type="text" name="content" value="{{ article.content }}" />          label><br><input   type="submit" value="提交" />              form>body>html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值