Django入门

前言

早就想入门后端了,自己倒是用过Flask,对于常规网站来说Django更完善一些。稍微学习下,能够做一些简单业务处理就好啦。

跟着官方文档学习的,这里做一下记录。纯纯拿来用,不去研究原理与架构,无脑跟着做就行了!

操作

安装

pip install django

新建项目

django-admin startproject mysite

启动项目

python manage.py runserver

或者指定端口号和host:
需要在配置文件中配置允许的host

# settings.py
ALLOWED_HOSTS = ["0.0.0.0"]
python manage.py runserver 0.0.0.0:8000
python manage.py runserver 8080

新建应用

在项目下新建一个应用:

python manage.py startapp polls

在应用里添加视图:

# polls/views.py

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

新建应用url配置文件:

# /polls/urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

将应用的url配置包含到项目url配置中

# mysite/urls.py
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/', include('polls.urls')),
]

这时跑起来访问下面的地址就能看到第一个页面了

http://127.0.0.1:8000/polls/

数据库

在以下文件中配置,该文件还有很多其他配置功能。

 mysite/settings.py

要求不高的话,直接使用python自带sqlite即可。Django默认也是使用sqlite。所以不需要修改。

执行以下代码生效

python manage.py migrate

数据模型

然后建立需要的数据模型

#  polls/models.py
from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __str__(self):
        return self.question_text
    # 这里可以根据业务为模型自定义方法 
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
    	return self.choice_text

建立好数据模型以后Django可以帮助我们生成建表语句和操作数据库的API。不过要先把应用的配置文件包含进项目配置文件。

# 修改mysite/settings.py
INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

最后执行以下命令,完成以后数据库就创建好了!

python manage.py makemigrations polls
python manage.py migrate

管理员页面

Django自带一个管理员页面,使用方法如下:

新建账号:

 python manage.py createsuperuser

页面是http://127.0.0.1:8000/admin/ 账号就是上面自己创建的。

只要在admin.py文件里面将模型注册一下,就可以用页面管理模型啦。在页面上新加问题

from .models import Question

admin.site.register(Question)

完善视图

接下来就可以继续根据业务需求完善接口了

# views.py
def question(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([q.question_text for q in latest_question_list])
    return HttpResponse(output)


def detail(request,question_id):
    question_detail = get_object_or_404(Question, pk=question_id)
    return HttpResponse(question_detail)
# urls.py
urlpatterns = [
    path('', views.index, name='index'),
    path('q', views.question, name='question'),
    path('', views.detail, name='q_d')
]

图片访问

第一种

# settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS=[
  os.path.join(BASE_DIR, "static")
]

图片放入项目文件夹如1.png,访问 http://0.0.0.0:8000/static/1.png即可

第二种

# settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# urls.py
from . import settings
from django.views.static import serve

urlpatterns = [
    path('admin/', admin.site.urls),
    path('autojs/', include('autojs.urls')),
    # 设置图片访问路径
    path('media/', serve, {'document_root': settings.MEDIA_ROOT}),
]

访问http://0.0.0.0:8000/media/1.png即可

上传文件

创建模型,如果按照上面的方法设置了

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

则下面的代码会上传项目根目录下的 /media/files 目录下

# modles.py
class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    file = models.FileField(upload_to='files')
    def __str__(self):
        return self.title

注册一下,方便在后台管理修改内容

# Register your models here.
from .models import Record ,Article
#创建后台用户 python3 manage.py createsuperuser
admin.site.register(Record)
admin.site.register(Article)

登录后台看下修改或者上传文件即可:
Django入门_第1张图片

模板

使用模板的话,要熟悉模的语法,自己些简单的页面可能会用到。正经项目还是用react或者vue前端框架吧。

首先项目根目录下新建一个templates文件夹,在settings.py注册模板目录:

# settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 'DIRS': [],
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 修改这里
        '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',
            ],
        },
    },
]

写一个简单的模板放到templates下:

hello.html:
<h1>{{ hello }}h1>

urls.py添加路由:

path('hello', views.hello_template, name='hello')

views.py 添加视图

def hello_template(request):
    context          = {}
    context['hello'] = 'Hello World!'
    return render(request, 'hello.html', context)

访问就可以看到效果

更多的模板语法

包括列表,过滤,循环,判断等在此不一一列举。

你可能感兴趣的:(django,python,后端)