入门django———搭建第一个django的网站
作者:互联网
背景
最近一直在学Java,每天和各种对象打交道。当够了’渣男’突然想起来好久没有写python了,毕竟python才是我的最爱。另外最近也在搭建ubuntu的caffe+tensorflow+digits环境,老师也让我们自己学学flask和django。说实话digits真的不好搭,ubuntu上光nvidia驱动这一块就够让人头疼的了,实在想骂人的时候就动手写了一个基本的django网站,大概花费两个小时左右吧,可以当放松,另外书上代码有问题的地方我也会改正,最后成功完成了。
先上个成果图
现在开始搭建
我的环境是win10+python3.7+django2.2.3(关于看django版本后面会讲)
1.虚拟环境的建立和准备工作
首先新创建一个文件夹,命名为learning_log。
打开cmd用cd切换到这个目录。
#切换成功后在cmd中使用下面命令创建名为ll_env的虚拟环境
python -m venv ll_env
#激活ll_env这个虚拟环境
ll_env\Scripts\activate
#激活后安装Django
pip install Django
#查看安装的Django版本
python -m django --version
#显示的就是django的版本啦
注意,使用的是虚拟环境的话前面会有(ll_env)这个显示的,不然就是没有激活虚拟环境。
2.创建项目
首先新建一个项目
django-admin.py startproject learning_log .
#注意后面的结束点一定要写上,这样才能使项目有合适的目录结构
#用dir查看一下目录结构或者自己打开文件夹查看,应该是有ll_env,manage.py和learning_log三个文件
#再看看learning_log的内容
dir learning_log
#应该是__init__.py,setting.py,urls.py和wsgi.py四个.py文件
因为我的已经做好了,目录里面多了很多东西所以这里就不展示了
创建数据库
同样在激活的虚拟环境下,用下面的命令
python manage.py migrate
然后会发现learning_log中多了一个db.sqlite3文件,这个就是数据库了。
检查项目是否成功创建
#还是在激活的虚拟环境下输入
python manage.py runserver
打开浏览器,输入网址localhost:8000应该可以看到django的欢迎界面,如下
想要停止服务,还是在cmd中按住ctrl+c就好啦
到此,确保一切正常后就可以开始写我们自己的内容了
3.创建应用程序和网页
ctrl+c停止掉服务后,在cmd中开始创建自己的app
python manage.py startapp learing_logs
#注意,我这里是learing_logs,书中原本是learning_logs,我是为了自己好区分点就在前面少了n。如果按书上来的话,在我后面的代码中对应地方把n加上就好了。
创建learning_logs成功后打开其中的models.py
#learing_logs下的models.py
from django.db import models
# Create your models here.
class Topic(models.Model):
"""用户学习的主题"""
text=models.CharField(max_length=200)
#max_length:设置主题名的长度
date_added=models.DateTimeField(auto_now_add=True)
#True的作用:每当创建新的主题时自动设置当前的日期和时间
def __str__(self):
"""返回模型的字符串表示"""
return self.text
class Entry(models.Model):
"""学到的有关某个主题的具体知识"""
topic=models.ForeignKey(Topic,on_delete=models.CASCADE)
#书中原码没有on_delete=models.CASCADE,但是Django2.X需要这个,否则会报错
text=models.TextField()
date_added=models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural='entries'
def __str__(self):
"""返回模型的字符串表示"""
return self.text[:50]+"..."
激活这个模型
编辑setting.py文件
#/learning_log/learning_log下的setting.py
"""
Django settings for learning_log project.
Generated by 'django-admin startproject' using Django 2.2.3.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'raeaahi)wo(*d99e+a!dfc+p5qbnt#ew9*r_k(hmbj$vhc!6$x'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#在这里添加下面两行
#我的应用程序
'learing_logs',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'learning_log.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'learning_log.wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/static/'
修改数据库,存储迁移自己定义的模型
记住,每次定义了新的模型后都要做这一步
#在cmd中输入
python manage.py makemigrations learing_logs
python manage.py migrate
获取超级用户权限
python manage.py createsuperuser
这里面的username随意填一个就好,邮箱可以不填,密码要填且自己要记住,后面登陆时会用到。
模型的注册
#learing_logs下的admin.py
from django.contrib import admin
# Register your models here.
from learing_logs.models import Topic,Entry
admin.site.register(Topic)
admin.site.register(Entry)
这个时候运行项目,还是python manage.py runserver
打开localhost:8000/admin
点击add添加Topic和Entries的内容(随意就好)
记得要save哦
最后,创建主页,映射和其他网页
快完成了有点小激动,不多废话直接上代码
#/learning_log/learning_log下的urls.py
"""learning_log URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from django.conf.urls import include,url
urlpatterns = [
path('admin/', admin.site.urls),
path(r'',include(('learing_logs.urls','learing_logs'), namespace='learing_logs')),
"""这里书上用的都是url(),但是Django2.X开始都用path()代替了,
还有include()里面的参数问题,一开始就是这里出错,
纠结了好一会看了相关的文档才解决,目前上面这个代码是正确的"""
]
在learing_logs下新建一个urls.py文件
#learing_logs下的urls.py
"""定义learing_logs的url模式"""
from django.conf.urls import url
from . import views
from django.urls import path,re_path
app_name='learing_logs'
urlpatterns=[
"""下面用#的都是path()的代码,但是不知道为什么有的运行会出错,
特别是topic_id匹配那一块,一开始匹配不到,后来试了很多最后才成功,
没注释的代码我运行是成功的,如果不成功可以试试更换一下注释的代码。
至于为什么url跳转的时候匹配错误我也没搞清楚,尴尬了"""
#主页
url(r'^$',views.index,name='index'),
#path('',views.index,name='index'),
#特定主题的详情页面
#re_path('topics/(?P<topic_id>\d+)/',views.topic,name='topic'),
url(r'^topics/(?P<topic_id>\d+)/$',views.topic,name='topic'),
#path('topics/(?P<topic_id>\d+)/', views.topic, name='topic'),
#显示所有主题
url(r'^topics/$',views.topics,name='topics'),
#path('topics',views.topics,name='topics'),
]
#learing_logs下的views.py
from django.shortcuts import render
from .models import Topic
# Create your views here.
def index(request):
"""学习笔记的主页"""
return render(request,'learing_logs/index.html')
def topics(request):
"""显示所有主题"""
topics=Topic.objects.order_by('date_added')
context={'topics':topics}
return render(request,'learing_logs/topics.html',context)
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,'learing_logs/topic.html',context)
最后就是各种模板html文件了
在learing_logs下新建templates文件夹,再在里面新建learing_logs文件夹保存各种html文件,一共有四个分别是base.html,index.html,topic.html和topics.html
下面是html文件的代码
index.html
{% extends "learing_logs/base.html" %} {% block content %}
<p>Learning Log helps you keep track of learning,for any topic you're learning about.</p>
{% endblock content %}
base.html
<p>
<a href="{% url 'learing_logs:index' %}">Learning Log</a> -
<a href="{% url 'learing_logs:topics' %}">Topics</a>
</p>
{% block content %} {% endblock content %}
topic.html
{% extends 'learing_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 %}
topics.html
{% extends "learing_logs/base.html" %} {% block content %}
<p>Topics</p>
<ul>
{% for topic in topics %}
<li>
<a href="{% url 'learing_logs:topic' topic.id %}">{{ topic }}</a>
</li>
{% empty %}
<li>No topics have been added yet.</li>
{% endfor %}
</ul>
{% endblock content %}
全部保存后直接python manage.py runserver启动服务
打开网页localhost:8000/topics,就可以看到之前一开始我的成果图了
点击Learning_Log可以跳转到首页(localhost:8000)
4.结束
写完这个又要回Ubuntu上面搭建digits了。就像我说的,希望每天可以强一点点,忙碌起来才能忘掉很多烦恼,也希望作为程序猿的大家也可以慢慢实现自己的梦想,作为一个七年的虎扑JR我就希望工作后能早点到达街薪。如果你在搭建的时候遇到什么问题的话可以评论留言,我看到会及时回复的。同时也希望能有机器学习,深度学习,数据分析这方面的大佬能指导一下我,该怎么学才能最好的去适应市场需求,能少走点弯路。当然考研还是第一步,没有研究生文凭感觉在人工智能方面面试会被直接刷掉,现实还是很残忍,无奈脸。
标签:logs,topics,py,入门,django,topic,learing,搭建 来源: https://blog.csdn.net/shelgi/article/details/96478012