0
点赞
收藏
分享

微信扫一扫

Django基础2

WikongGuan 2022-11-25 阅读 68


文章目录

  • ​​一、主要内容:​​
  • ​​二、创建Django项目,这个参照 项目学习_1​​
  • ​​2.1 创建项目​​
  • ​​2.2 创建后台APP​​
  • ​​2.2 创建超级用户​​
  • ​​2.3 数据库新建数据库​​
  • ​​2.4 创建文件夹​​
  • ​​2.5 修改back_stage_management/settings.py文件​​
  • ​​2.6 News/models.py​​
  • ​​2.7 数据库更新​​
  • ​​2.8 修改views.py​​
  • ​​2.9 修改urls.py​​
  • ​​2.10 Django自带后台插入数据​​
  • ​​2.11 中英文设置和地区设置settings.py​​
  • ​​三、数据库html操作​​
  • ​​3.1 得到base.html​​
  • ​​3.2 创建文件,用于继承base.html​​
  • ​​3.3 后台调用数据​​
  • ​​四、admin页操作http://127.0.0.1:8000/admin/​​
  • ​​4.1 对数据库的操作​​
  • ​​4.2 修改admin页的显示项,美化​​
  • ​​五、html的forms使用​​
  • ​​5.1 建表User, 修改models.py​​
  • ​​5.2 同步到数据库​​
  • ​​5.3 新建forms.html​​
  • ​​5.4 修改views.py文件, 返回请求数据, hash加密​​
  • ​​5.5 修改urls.py​​
  • ​​5.6 结果​​
  • ​​六、Django自带的forms使用​​
  • ​​6.1 新建News/forms.py,用于存放表单​​
  • ​​6.2 views.py调用表单forms​​
  • ​​6.3 新建django_forms.html​​
  • ​​6.4 urls.py添加 略​​


承接

​​Django项目学习_1​

一、主要内容:

  • 继承页面
  • 页面调用后台数据库
  • win10 python3.6.8 Django 1.8.2

二、创建Django项目,这个参照 项目学习_1

2.1 创建项目

​django-admin startproject back_stage_management​

2.2 创建后台APP

​python manage.py startapp News​

2.2 创建超级用户

​python manage.py createsuperuser​

2.3 数据库新建数据库

​mysql> create database news default character set utf8;​

2.4 创建文件夹

​back_stage_management/template/​​​​back_stage_management/static/​

2.5 修改back_stage_management/settings.py文件

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'News', # zjq添加 刚刚创建app的名字
)

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, "template".replace("\\",'/')),
os.path.join(BASE_DIR, "News".replace("\\",'/')),
],
'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',
],
},
},
]


DATABASES = {
'default': {
# 默认数据库
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# zjq 配置mysql
'ENGINE': 'django.db.backends.mysql',
'NAME': 'news', # 注意这个数据库通过root用户需要新建
'HOST':'localhost',
'USER':'root',
'PASSWORD':'zjq',
'PORT':3306, # 默认不用加
}
}


STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static".replace("\\", "/")), # 添加静态文件加的路径到工程
)

2.6 News/models.py

from django.db import models
# Create your models here.
class News(models.Model):
title = models.CharField(max_length=32)
author = models.CharField(max_length=32)
data = models.DateField()
content= models.TextField()
src = models.CharField(max_length=64)
delete_flag = models.CharField(max_length=4)

2.7 数据库更新

  • ​python manage.py validate​

出错:Error loading MySQLdb module

安装`pip install pymysql`
修改同名文件夹在的__init__.py增加
import pymysql
pymysql.install_as_MySQLdb()

  • ​python manage.py makemigrations​
  • ​python manage.py syncdb​​ 如果这里是第一次运行, 会建议创建超级用户, 也就是该服务器Django的管理员

You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'zjq'): zjq
Email address: xxx@qq.com
Password:
Password (again):
Superuser created successfully.

2.8 修改views.py

from django.shortcuts import render
from django.shortcuts import render_to_response

# Create your views here.
from .models import News # 这个News就是刚创建的数据库类
def news(request):
name = "admin"
age = "999"
return render_to_response("news.html", locals())

2.9 修改urls.py

from django.conf.urls import include, url
from django.contrib import admin
from News.views import *

urlpatterns = [
url(r'^admin/', include(admin.site.urls)), # 注意这里要把后面的$去掉
url(r'^news/', news),
]

2.10 Django自带后台插入数据

修改admin.py

from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(News) # 安装模型

127.0.0.1:8000/admin/

Django基础2_数据库

newss的add多组插入数据

2.11 中英文设置和地区设置settings.py

LANGUAGE_CODE = 'en-us'
# LANGUAGE_CODE = 'zh-hans' # 汉字

TIME_ZONE = 'Asia/Shanghai' # 设置上海地区
# TIME_ZONE = 'UTC'

三、数据库html操作

3.1 得到base.html

首先浏览器访问西北大学主页面, 然后Ctrl+S下载页面, 下载完成后会有一个html页面和一个西北大学的文件夹(包含html需要的image, js, css)
将文件夹内的三种文件分别保存到工程文档的static中的对应的文件夹中,同时将修改html中的文件路径,修改为static
问什么这样做呢,因为西北大学主页就已经是比较完美的, 正好使用这个页面作为base页, 而后展开下面的教学

Django基础2_数据库_02

  • 下载的数据分类保存到下面几个文件夹内
  • Django基础2_django_03

  • 将下载的HTML文件的内容复制到base.html中,然后将里面的路径修改为类似如下
    ​"/static/css/xxxx.css"​​​​"/static/js/xxxx.js"​​​​"/static/image/xxxx.jpg"​
  • 修改base.html
    删除关于讲座报告栏的div
    删除结果如下图所示
  • Django基础2_html_04

  • 代码如下:

<title>
{% block title %}
西北大学
{% endblock %}
</title>

<div class="main-lecture wp-col3-2 mx-fl">
<div class="main-header">
<h2>
<a href="http://www.nwu.edu.cn/home/index/articles/mid/3888.html">讲座报告</a>
</h2>
<span>
<a href="http://www.nwu.edu.cn/home/index/articles/mid/3888.html">更多 +</a>
</span>
</div>
{% block content %}
{% endblock %}

</div>

3.2 创建文件,用于继承base.html

​template/content.html​

<!-- 继承base.html -->
{% extends "base.html" %}

{% block title %}
新闻页 content修改
{% endblock %}
{% block content %}
<h1>新闻页 new_list,这里是调用西大base.html的页面,只是想换什么内容,通过block进行更换</h1>
{% endblock %}

​template/new_list.html​

<!-- 继承base.html -->
{% extends "base.html" %}

{% block title %}
新闻页 new_list
{% endblock %}

{% block content %}
<h1>新闻页 new_list,这里是调用西大base.html的页面,只是想换什么内容,通过block进行更换</h1>
{% endblock %}

3.3 后台调用数据

  • views.py 建立调用html 的函数

from django.shortcuts import render_to_response

# Create your views here.
from .models import News

def news(request):
name = "admin"

return render_to_response("news.html", locals())

def base(request):

return render_to_response("base.html",locals())

def new_list(request):
news = News.objects.filter(delete_flag = "N").order_by("data")
return render_to_response("new_list.html", locals())

# url(r'^new_list/(\w+)', content), new_list.html的超链接调转到content, 同时传递参数src为超链接内容
def content(request, src):
new = News.objects.get(src = src)
return render_to_response("content.html", locals())

  • urls.py 客户端请求时调用views.py的调用的html

from django.conf.urls import include, url
from django.contrib import admin
from News.views import *

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^news/$', news),
url(r'^base/$', base),
url(r'^new_list/$', new_list),
url(r'^content/$', content),
url(r'^new_list/(\w+)', content),
]

  • new_list.html内容, 用于继承base.html, 同时修改block的内容,用于自己用

<!-- 继承base.html -->
{% extends "base.html" %}

{% block title %}
新闻页 new_list
{% endblock %}



{% block content %}
<h1>新闻页 new_list,这里是调用西大base.html的页面,只是想换什么内容,通过block进行更换</h1>
<div>
{% for new in news %}
<ul class="main-notice-list">
<li><span class="day">{{new.data}}</span></time><a href="{{new.src}}"><p>{{new.title}}</p></a></li>
</ul>
{% endfor %}
</div>

{% endblock %}

  • content.html内容, 用于继承base.html, 同时修改block的内容,用于当new_list超链接时进行新数据的显示

<!-- 继承base.html -->
{% extends "base.html" %}

{% block title %}
{{new.title}}
{% endblock %}
{% block content %}
<h1>{{new.title}}</h1>
<p>{{new.content}}</p>
{% endblock %}
{% block news2 %}
<h1>空白等待更改</h1>
{% endblock %}

至此:

由Django调用mysql数据库进行html显示结束

Django基础2_html_05

四、admin页操作http://127.0.0.1:8000/admin/

Django基础2_html_06

4.1 对数据库的操作

admin.py

from django.contrib import admin
from .models import *

admin.site.register(News, ) # 安装模型

  • 在下面每个项都可以增删改查, 每个项就是表中一个数据

4.2 修改admin页的显示项,美化

admin.py

from django.contrib import admin
from .models import *

# Register your models here.
class NewsAdmin(admin.ModelAdmin):
list_display = ["title", "author", "data"] # 注意这块跟model里面定义的key要保持一致
search_fields = ["author"] # 在/admin/页面添加搜索框,
list_filter = ["data"] # 添加过滤器
date_hierarchy = "data" # 添加时间

admin.site.register(News, NewsAdmin) # 安装模型

Django基础2_django_07

详细知识内容可以参考博客
Django学习

五、request

<!DOCTYPE html>
<html>
<head>
<title>news</title>
<meta charset="utf-8">
</head>
<body>
<h1>{{request}}</h1><br>
<p>{{request_list}}</p>

<ul>
<li>{{request.path}} <span>返回除了域名以外的其他路径</span></li>
<li>{{request.get_host}} <span>获取主机名称</span></li>
<li>{{request.get_full_path}} <span>获取请求路径,但是包含查询字符串</span></li>
<li>{{request.is_secure}} <span>判断是否是https协议</span></li>
<li>{{request.is_secure}} <span>判断是否是https协议</span></li>
<!-- <li>{{request.META}} <span>判断是否是https协议</span></li> -->
<li>{{request.META.HTTP_USER_AGENT}} <span>META 方法</span></li>

</ul>
<p>welcome to {{request.path}}</p>

</body>
</html>

Django基础2_django_08

五、html的forms使用
  • 说明:本节学习html的表单,以及如何将表单数据保存到数据库,
  • 新建user表用于保存user和password
  • 新建前端forms.html
  • form组件包含
    • Text 文本输入框
    • password 密码输入框
    • submit 按钮输入框
  • form表单数据提交必须包含name属性
  • action 表单数据提交的地址 method提交方式
  • get是容易请求,以明文形式,而post使用非明文加密方

5.1 建表User, 修改models.py

from django.db import models
# Create your models here.
class News(models.Model):
title = models.CharField(max_length=32)
author = models.CharField(max_length=32)
data = models.DateField()
content= models.TextField()
src = models.CharField(max_length=64)
delete_flag = models.CharField(max_length=4)

class User(models.Model):
user = models.CharField(max_length=32)
password = models.CharField(max_length=32)

5.2 同步到数据库

Django基础2_数据库_09

5.3 新建forms.html

注意: 这里因为PST请求,Django含有验证措施,会出错,所以需要在settings.py中修改数据
MIDDLEWARE_CLASSES = (
# ‘django.middleware.csrf.CsrfViewMiddleware’, # fangzhi csrf跨域, 注释掉就好了,对于post请求的时候)

<!DOCTYPE html>
<html>
<head>
<title>forms</title>
<meta charset="utf-8">
</head>
<body>
<!-- action 表单数据提交的地址 method提交方式 -->
<form action="" method="POST">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="click">

</form>
</body>
</html>

5.4 修改views.py文件, 返回请求数据, hash加密

from django.shortcuts import render_to_response
import hashlib
from News.models import *
# Create your views here.
def forms(request):
if request.method == "POST" and request.POST: # 如果你请求的是post格式, 并有数据
username = request.POST["username"] # 前端里面的的name值
password = request.POST["password"]
hash = hashlib.md5()
hash.update(password.encode("UTF-8")) # 指定编码格式,否则会报错
password = hash.hexdigest()

u = User()
u.user = username
u.password = password
u.save() # 将得到的数据保存到table中

return render_to_response("forms.html", locals())

5.5 修改urls.py

from django.conf.urls import include, url
from django.contrib import admin
from News.views import *

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

5.6 结果

Django基础2_django_10


Django基础2_数据库_11

六、Django自带的forms使用

6.1 新建News/forms.py,用于存放表单

当html进行服务器访问,将会根据views.py实例化表单

from django import forms
# 生成forms表单
class Register(forms.Form):
user = forms.CharField(max_length=32, label="用户名") # 默认显示user, 添加label显示label名
password = forms.CharField(max_length=32)
phone = forms.CharField(max_length=15)

def clean_password(self): # 函数明命名必须clean_字段名称
password = self.cleaned_data["password"] # 获取要判断的数据
if password[0].isdigit(): # 判断数字
raise forms.ValidationError("firs cann't be number")
return password

6.2 views.py调用表单forms

当html调用forms会实例化

# encoding=UTF-8
from django.shortcuts import render_to_response
import hashlib
from News.models import *
from News.forms import *
def django_forms(request):
if request.method == "POST" and request.POST:
register = Register(request.POST) # 将request数据提交到表单里面进行验证
if register.is_valid():
data = register.cleaned_data # 校验成功的数据以字典的形式返回
else: # 如果错误, 将会仅仅实例化表单,什么都不做
register = Register()
return render_to_response("django_forms.html", locals())

6.3 新建django_forms.html

<!DOCTYPE html>
<html>
<head>
<title>django_forms</title>
<meta charset="utf-8">
<style>
.errorlist{color: red}
</style>
</head>
<body>
<form action="" method="post">
{{register}}
<input type="submit" value="click">

<!-- {{register.as_p}}
{{register.as_ul}} -->

</form>
{{data}}
</body>
</html>

6.4 urls.py添加 略

  • 结果
  • 访问​​http://127.0.0.1:8000/django_forms/​​ 此时直接实例化类​​Register​
  • Django基础2_django_12


  • 直接点击​​click​​, 红色是​​.errorlist{color: red}​​ 这是验证机制提示
  • Django基础2_数据库_13


  • 这是密码输入部分根据​​clean_password​​验证错误提示
  • Django基础2_html_14


  • 这是验证正确显示的结果:​​data = register.cleaned_data # 校验成功的数据以字典的形式返回​
  • Django基础2_django_15





举报

相关推荐

0 条评论