您的位置:首页 > 移动开发 > WebAPP

Django -----虚拟环境、服务器、创建项目、创建webApp,model,和注册model

2017-10-13 09:09 781 查看
内容一:虚拟环境、服务器、创建项目、创建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(mod
4000
els.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--
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: