【python3】Django之虚拟环境、服务器、创建项目、创建webApp,model,和注册model

 

内容一:虚拟环境、服务器、创建项目、创建webApp,model,和注册model

pre:安装虚拟环境

 

Pip3 install virtualenv

 

1.创建虚拟环境

Python3 -m venv ll_env

 

2.激活虚拟环境

source ll_env/bin/activate(关闭是deactivate)

 

3.在虚拟环境下安装Django

Pip3 install Django

 

4.在django中创建项目,创建应用程序

django-admin.py startproject learning_log .

 

5.数据库迁移

Python3 manage.py migrate

 

6.启动服务器

Python3 manage.py runserver

 

 

 

 

7.创建应用程序(重新打开一个窗口)

Python3 manage.py startapp learning_logs

 

8.应用中的models.py

 

from django.db import models

class Topic(models.Model):"""用户学习的主题"""

    text = models.CharField(max_length=200)

    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):

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

        return self.text

 

9.项目和应用关联,项目中setting.py

INSTALLED_APPS = (

    'django.contrib.admin’,

    'django.contrib.auth’,

    'django.contrib.contenttypes’,

    'django.contrib.sessions’,

    'django.contrib.messages’,

    'django.contrib.staticfiles’,

    # 我的应用程序

    'learning_logs',

)

 

10.数据库和应用关联迁移

   Python3 manage.py makemigrations learning_logs

 

 

11.应用这种迁移

     Python3 manage.py migrate

 

(每当需要修改“学习笔记”管理的数据时,都采取如下三个步骤:修改models.py;对learning_logs 调用makemigrations ;让Django迁移项目)

 

 

12.创建超级用户

Python3 manage.py createsuperuser

 

13.向管理网站注册model,应用中admin.py

from django.contrib import admin

from learning_logs.models import Topic

admin.site.register(Topic)

http://localhost:8000/admin/

 

 

14.定义模型entry基本上就是将上边的过程再重复一遍

 

 

 

15.Django shell

 

//得到全部内容

❶ >>> from learning_logs.models import Topic

>>> Topic.objects.all()

 

//或者遍历一下

>>> topics = 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(2015, 5, 28, 4, 39, 11, 989446, tzinfo=<UTC>)

 

//查看与主题相关联的条目

 

t.entry_set.all()(外键关联)

 

 

 

内容二:创建网页,学习笔记主页

 

 

1.映射url

 

用户通过在浏览器中输入URL以及单击链接来请求网页,因此我们需要确定项目需要哪些URL。主页的URL最重要,它是用户用来访问项目的基础URL。当前,基础

URL(http://localhost:8000/)返回默认的Django网站,让我们知道正确地建立了项目。我们将修改这一点,将这个基础URL映射到“学习笔记”的主页。

 

打开项目主文件夹项目中的文件urls.py

 

from django.conf.urls import include, urlfrom django.contrib import admin

urlpatterns = [

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

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

]

 

2.在应用中创建urls.py

 

"""定义learning_logs的URL模式"""from django.conf.urls import urlfrom . import views

urlpatterns = [

#主页

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

]

 

 

3.编写视图

应用中views.py,这个文件只导入了函数render() ,它根据视图提供的数据渲染响应

 

from django.shortcuts import render

def index(request):

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

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

 

 

4.编写模版

 

模版继承父视图:base.html

在文件夹learning_logs中新建一个文件夹,并将其命名为templates。在文件夹templates中,再新建一个文件夹,并将其命名为learning_logs。这好像有点多余(我们在文件夹learning_logs中创建了文件夹templates,又在这个文件夹中创建了文件夹learning_logs),但建立了Django能够明确解读的结构,即便项目很大,包含很多应用程序亦如此。在最里面的文件夹learning_logs中,新建一个文件,并将其命名为base.html,再在这个文件中编写如下代码:

 

<p>

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

</p>

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

 

模板标签 ,它是用大括号和百分号({% %} )表示的。模板标签是一小段代码,生成要在网页中显示的信息。在这个实例中,模板标签{% url 'learning_logs:index' %} 生成一个URL,该URL与learning_logs/urls.py中定义的名为index 的URL模式匹配(见❶)。在这个示例中,learning_logs 是一个命名空间 ,而index 是该命名空间中一个名称独特的URL模式

 

 

或者锚标签<a href="link_url">link text</a>

 

 

模版继承子模版:index.html

 

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

❷ {% block content %}

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

❸ {% endblock content %}

 

 

 

 

Eg:重复,编写模版:显示特定主题的界面http://localhost:8000/topics/1/

 

 

 

 

(1)url模式

    earning_logs/urls.py中

    urlpatterns = [

    --snip--

    # 特定主题的详细页面,url函数的三个参数:第一个是适配的url,也就是请求的地址,第二个是和视图建立联系,第三个给url起个别名

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

]

 

 

 

 

(2)视图

views.py

#

❶ def topic(request, topic_id):

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

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

    ❸ entries = topic.entry_set.order_by('-date_added')

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

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

 

 

 

 

(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 %}

 

 

 

 

(4)链接调用,调用前边三个步骤写好的东西

我们需要修改模板topics.html

--snip--

{% for topic in topics %}

    <li>

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

    </li>

{% empty %}

--snip--

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值