Django练习建website

基于ubuntu16或18,在练习过程中,需要在服务器本地使用浏览器来随时验证练习的效果,因此需要安装图形界面的ubuntu。

1.建立虚拟环境

mkdir learning_log

cd learning_log

learning_log$python -m venv ll_env

如果不能使用模块venv,可安装virtualenv包,可执行如下命令:

$pip install --user virtualenv

$sudo apt-get install python-virtualenv

2.激活虚拟环境

learning_log$source ll_env/bin/activate

learning_log$. ll_env/bin/activate  ##$后面用小数点来代替source

 

(ll_env)learning_log$deactivate  ##关闭运行虚拟环境

learning_log$

3.在虚拟环境中安装Django

(ll_env)learning_log$pip install Django

4.在Django中创建项目

(ll_env)learning_log$django-admin startproject learning_log .    ##注意最后有一个空格和小数点

(ll_env)learning_log$ls

learning_log  ll_env  manage.py

(ll_env)learning_log$ls learning_log

__init__.py  settings.py  urls.py  wsgi.py

5.创建数据库

(ll_env)learning_log$python manage.py migrate

(ll_env)learning_log$ls

db.sqlite3  learning_log  ll_env  manage.py

6.查看项目

(ll_env)learning_log$python manage.py runserver

运行到此,可以在服务器本地浏览器中输入http://localhost:8000/ 或http://127.0.0.1:8000/

It worked!

Congratulations on your first Django-powered page.

如果出现错误消息“That port is already in use",请执行python manage.py runserver 8001,让Django使得另一个端口。

7.创建应用程序

(ll_env)learning_log$python manage.py startapp learning_logs

(ll_env)learning_log$ls

db.sqlite3  learning_log  learning_logs  ll_env  manage.py

(ll_env)learning_log$ls learning_logs/

admin.py  __init__.py  mirgrations models.py  tests.py  views.py

8.定义模型

打开models.py

from django.db import models

class Topic(models.Model):

    """用户学习的主题"""

    text = models.CharField(max_length=200)

    date_add = models.DataTimeField(auto_now_add = True)

 

    def __str__(self):

        """返回模型的字符串表示"""

        return self.text

要获悉可在模型中使用的各种字段,请参阅网址:https://docs.djangoproject.com/en/1.8/ref/models/fields/

9.激活模型

打开settings.py

--snip--

INSTALLED_APPS = (

        'django.contrib.admin',

        'django.contrib.auth',

        'django.contrib.contenttypes',

        'django.contrib.sessions',

        'django.contrib.messages',

        'django.contrib.staticfiles',

)

--snip--

将前面的应用程序添加到这个元组中:

--snip--

INSTALLED_APPS = (

        --snip--

        'django.contrib.staticfiles',

        # 我的应用程序

        ‘learning_logs',

)

--snip--

 

接下来,需要让Django修改数据库,使其能够存储与模型Topic相关的信息。

(ll_env)learning_log$ python manage.py makemigrations learning_logs

迁移数据库

(ll_env)learning_log$ python manage.py migrate

每当需求修改“学习笔记”管理的数据时,都采用上面三个步骤:修改models.py;对learning_logs调用makemigratios;让Django迁移项目。

10.Django管理网站

10.1创建超级用户

(ll_env)learning_log$ python manage.py createsuperuser

10.2向管理网站注册模型

打开admin.py

from django.contrib import admin

from learning_logs.models import Topic

admin.site.register(Topic)

现在,使用超级用户帐户访问管理网站:访问http://localhost:8000/admin/

10.3添加主题

如主题是国际象棋和攀岩,输入Chess和Rock Climbing

11.定义模型Entry

要记录学到的国际象棋和攀岩知识,需要在学习笔记中添加条目定义模型。每个条目都与特定的主题相关联,多个条目对同一个主题的关系。

打开models.py

from django.db import models

class Topic(models.Model):

--snip--

class Entry(models.Model):

    """学到的有关某个主题的具体知识"""

    topic = models.ForeignKey(Topic)

    text = models.TextField()

    date_added = models.DateTimeField(auto_now_add = True)

    class Meta:

        verbose_name_plural = 'entries'

    def __str__(self):

        """返回模型的字符串表示"""

        return self.text[:50] + "..."

12.迁移模型Entry

(ll_env)learning_log$ python manage.py makemigrations learning_logs

(ll_env)learning_log$ python manage.py migrate

13.向管理网站注册Entry

打开admin.py

from django.contrib import admin

from learning_logs.models import Topic

admin.site.register(Topic)

admin.site.register(Entry)

返回到http://localhost:8000/admin/,将看到learning_logs下列出了Entries

14.Django shell

是测试项目和排除其故障的理想之地。

(ll_env)learning_log$ python manage.py shell

>>>from learning_logs.models import Topic

>>>Topic.objects.all()

[, ]

>>>for topic in topics:

...print(topic.id, topic)

>>>t = Topic.objects.get(id=1)

>>>t.text

Chess

>>>t.date_added

datetime.datetime(2019,12,22,16,24,11,989446,tzinfo =)

>>>t.entry_set.all()

[, ]

15.创建网页:学习笔记主页

三个阶段:定义URL、编写视图和编写模板。

15.1映射URL

打开urls.py(注意:该文件是在项目主文件夹learning_log中的)

from django.conf.urls import include, url

from django.contrib import admin

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

将urlpatterns修改:

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

                      url(r'',include('learning_logs.urls', namespace = 'learning_logs')), ]

创建另一个urls.py(注意:这次是在文件夹learning_logs中)

“”“定义learning_logs的URL模式"""

from django.conf.urls import url

from . import views

urlpatterns = [

    # 主页

    url(r'^$', views.index, name = 'index'), ]

15.2编写视图

打开views.py

from django.shortcuts import render

def index(request):

    """学习笔记的主页"""

    return render(request, 'learning_logs/index.html')

15.3编写模板

在文件夹learning_logs中新建一个叫templates的文件夹,在templates下再新建一个文件夹learning_logs,并在这个新建的learning_logs文件夹中新建一个index.html文件,index.html里面编写代码如下:

<p>Learning Log</p>

<p>Learning Log helps you keep track of your learning, for any topic you're learning about.</p>

现在打开http://localhost:8000/,将看到刚才创建的网页,而不是默认的Django网页。

15.4创建其他网页

15.4.1父模板

base.html

<p>

   <a href="{% url 'learning_logs:index' %}">Learning Log</a>

</p>

{% block content %}{% endblock content %}

15.4.2子模板

重新编写index.html,使其继承base.html。

打开index.html

{% extends "learning_logs/base.html" %}

{% block content %}

  <p>Learning Log helps you keep track of your learning, for any topic you're learning about.</p>

{% endblock content %}

16.显示所有主题的页面

16.1URL模式

修改learning_logs/urls.py

“”“定义learning_logs的URL模式"""

from django.conf.urls import url

from . import views

urlpatterns = [

    # 主页

    url(r'^$', views.index, name = 'index'), 

   # 显示所有的主题

    url(r'^topics/$', views.topics, name = 'topics'), ]

16.2视图

修改views.py

from django.shortcuts import render

from . models import Topic

def index(request):

    """学习笔记的主页"""

    return render(request, 'learning_logs/index.html')

def topics(request):

    """显示所有的主题"""

    topics = Topic.objects.order_by('date_added')

    Context = {'topics': topics}

    return render(request, 'learning_logs/topics.html', context)

16.3模板

创建一个文件叫做topics.html,并存储到index.html所在的目录中。下面演示了如何在这个模板中显示主题:

{% extends "learning_logs/base.html" %}

{% block content %}

  <p>Topics</p>

  <ul>

    {% for topic in topics %}

      <li>{{ topic }}</li>

    {% empty %}

      <li>No topics have been added yet.</li>

    {% endfor %}

  </ul>

{% endblock content %}

修改父模板base.html,使其包含到显示所有主题的页面的链接:

<p>

  <a href="{% url 'learning_logs:index' %}">Learning Log </a> -

  <a href="{% url 'learning_logs:topics' %}">Topics</a>

</p>

{% block content %}{% endblock content %}

17.显示特定主题的页面

17.1URL模式

修改learning_logs/urls.py

--snip--

urlpatterns = [

    --snip--

    # 特定主题的详细页面

    url(r'^topics/(?p<topic_id>\d+)/$', views.topic, name = 'topic'),

]

17.2视图

函数topic()需要从数据库中获取指定的主题以及与之相关联的所有条目。

修改views.py

--snip--

def topic(request, topic_id):

    """显示单个主题及其所有的条目"""

    topic = Topic.objects.get(id = topic_id)

    endtries = topic.entry_set.order_by('-date_added')

    context = {'topic': topic, 'entries':entries}

    return render(request, 'learning_logs/topic.html', context)

17.3模板

修改topic.html

{% extends 'learning_logs/base.html' %}

{% block content %}

  <p>Topic:{{ topic }}</p>  

  <p>Entries:</p>

  <ul>

  {% for entry in entries %}

    <li>

      <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>

      <p>{{ entry.text|linebreaks }}</p>

    <li>

  {% empty %}

    <li>

      There are no entries for this topic yet.

    </li>

  {% endfor %}

  </ul>

{% endblock content %}

17.4将显示所有主题的页面中的每个主题都设置为链接

修改topic.html

--snip--

    {% for topic in topics %}

      <li>

        <a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a>

      </li>

    {% empty %}

--snip--

打开http://localhost:8000/topics/1/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值