写点什么

DjangoTask2

用户头像
ZERO
关注
发布于: 刚刚

Django 项目

django-admin startproject 项目名
### 保证在manage.py的目录下执行python manage.py runserver #启动自带服务器
python manage.py startapp 应用名 #创建应用
复制代码


0.1 users APP

# 新建app,setting注册python manage.py atartapp users
# model.pyfrom django.db import modelsfrom django.contrib.auth.models import AbstractUser# Create your models here.GENDER_CHOICES = ( ("male","男"), ("female","女"))class UserProfile(AbstractUser): gender = models.CharField(verbose_name = '性别',choices=GENDER_CHOICES, max_length=50) mobile = models.CharField(max_length=11,unique=True,verbose_name='手机号码')
class meta: verbose_name = '用户信息' verbose_name_plural = verbose_name
def __str__(self): return self.username # settings.pyAUTH_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', },]
AUTH_USER_MODEL = "users.UserProfile"
复制代码

文件权限不够,在宝塔界面设置

云服务器安全组和防火墙都需要开放端口

runserver 启动后,提示 Error: That port is already in use.
ps aux | grep -i manage  #查看进程
sudo lsof -i:8000
kill -9 进程id
复制代码

1.将新建的 APP 与项目进行关联

修改的文件名是 setting.py

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'blog', # 新建APP]
复制代码

2.创建超级用户前,同步数据库

python manage.py migrate   # 同步表
python manage.py createsuperuser # 创建超级用户
复制代码



3.修改后台语言

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
复制代码


4.APP 里创建表,然后,添加到后台显示

######   models.py   #####from django.db import models
# Create your models here.
class Blog(models.Model): title = models.CharField(max_length=50, verbose_name='标题') content = models.TextField(verbose_name='文章内容', default='') count = models.IntegerField(verbose_name='阅读次数', default=0) creat_time = models.DateTimeField(auto_now=True,verbose_name='创建时间')
class Meta: verbose_name = '博客' # 表名注释 verbose_name_plural = verbose_name #没有这条语句,表名+s def __str__(self): return self.title # 标题内容显示表内title
###### admin.py #####from django.contrib import admin
from .models import Blog# Register your models here.# admin.site.register(Blog)
@admin.register(Blog)class BlogAdmin(admin.ModelAdmin): list_display=('title','creat_time','count') # 选择性显示 # list_editable=('title','content')
复制代码


5.同步到数据库

python manage.py makemigrations
python manage.py migrate
复制代码


6.编写页面逻辑

1.添加页面模板文件夹

修改 settings.py

import os


TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', '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', ], }, },]
复制代码

添加路径前需要先导入 OS 库

修改 views.py 文件

from django.shortcuts import renderfrom .models import Blog # 使得html文件显示数据库的内容# Create your views here.


def index(request): # request前端请求 blogs = Blog.objects.all() # 查询所有文章 print(blogs) return render(request,'index.html', {'blogs':blogs} ) # 将blog传到前端 def read_blog(request,id): print(f'{id}:我是通过前端点击链接来的') return render(request,'index.html')
复制代码


修改 urls.py 文件

from blog.views import index
urlpatterns = [ path('admin/', admin.site.urls), path('',index,name='index'), path('read/<int:id>',read_blog,name='read_blog'),]
复制代码

将我们定义的方法引入,然后定义好访问什么路径来执行这个方法

在 templates 文件夹下创建一个 html 文件

<html>    <head>        <title>我的首页</title>    </head>
<body> <h1>欢迎来到我的网站!</h1> <ul> {% for blog in blogs %} <li> <a href='{% url 'read_blog' blog.id %}'>{{blog.title}}</a> </li> <p>{{blog.creat_time}}</p>
{% endfor %} </ul> </body></html>
复制代码


7.添加文章详情页

content.html

<html>    <head>        <title>我的首页</title>    </head>
<body> <h1 style='float:right'> <a href='/'>回到首页<a> </h1> <h1>{{blog.title}}</h1> <div> {{blog.content}} </div> </body></html>
复制代码

编写业务逻辑 views.py

def read_blog(request,id):    blog = Blog.objects.get(id=id)    print(f'{id}:我是通过前端点击链接来的')    return render(request,'content.html',{'blog':blog})
复制代码

修改 urls.py

urlpatterns = [    path('admin/', admin.site.urls),    path('',index,name='index'),    path('read/<int:id>',read_blog,name='read_blog'),]
复制代码

8.部署,安装 pymysql

安装 pymysql

pip install pymysql
复制代码


DATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME': 'blog',        'USER': 'blog',        'PASSWORD': '密码',        'HOST': 'ip',        'PORT': '3306',    }}
pip install pymysql # python控制mysql的包
mysql -uyuancong -p # 查看mysql是否安装成功 注意和自己的数据库名字一致
复制代码

宝塔修改数据库权限

修改_config>init_.py 文件

import pymysql
pymysql.install_as_MySQLdb()
复制代码


show databases; # 查询数据库use blogshow tables # 
exit()
复制代码


安装一下重要应用

1.supervisor

sudo apt install supervisor -y # 在ubantu非虚拟环境下装
复制代码



2.在虚拟环境安装 gunicorn

pip install gunicorn # 在虚拟环境下
复制代码


1.在项目根目录下创建一个 gunicorn_start.sh 文件
#!/bin/bash
NAME="MyBlog"DJANGODIR=/home/tango/Desktop/DjangoDev/www/MyBlog #Django project directory 改USER=tango # the user to run as 改GROUP=tango # the group to run as 改NUM_WORKERS=1 # how many worker processes should Gunicorn spawnDJANGO_SETTINGS_MODULE=config.settings # which settings file should Django use 改DJANGO_WSGI_MODULE=config.wsgi # WSGI module name 改
echo "Starting $NAME as `whoami`"
# Activate the virtual environmentcd $DJANGODIRsource /home/tango/Desktop/DjangoDev/env/bin/activate # 改export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULEexport PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't existRUNDIR=$(dirname $SOCKFILE)test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)exec /home/tango/Desktop/DjangoDev/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \ # 改--name $NAME \--workers $NUM_WORKERS \--user=$USER --group=$GROUP \--log-level=debug \--log-file=-
复制代码
2.修改权限
chmod +x gunicorn_start.sh
复制代码
3.运行
 ./gunicorn_start.sh
复制代码

配置 Nginx

location /static/ {      alias /home/www/MyBlog/static/;      expires max;      access_log off;      log_not_found off;          }


location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://127.0.0.1:8000; break; } }
复制代码

4. 配置 Supervisor

sudo vim /etc/supervisor/conf.d/myblog.conf
复制代码

复制代码

并写入如下内容

[program:myblog]command = *******/gunicorn_start.shuser = serverautostart=trueautorestart=true
redirect_stderr = truestdout_logfile = /var/log/myblog.logstderr_logfile=/var/log/myblog.err
复制代码

复制代码

user = server

同样也要修改成为自己的用户名

最后更新一下我们设置的一系列内容

sudo supervisorctl updatesudo supervisorctl reload
复制代码

5. 关于后台静态样式丢失问题

修改 settings.py

STATIC_ROOT = os.path.join(BASE_DIR, "static")
复制代码

复制代码


并在项目目录下新建一个 static 的文件夹

运行如下命令进行静态文件收集

python manage.py collectstatic
复制代码

复制代码


其他

1.Sql 注入攻击的危害

非法读取、篡改、删除数据库中的数据

盗取用户的各类敏感信息、获取利益

通过修改数据库来修改网页上的内容

注入木马


用户头像

ZERO

关注

还未添加个人签名 2021.06.12 加入

还未添加个人简介

评论

发布
暂无评论
DjangoTask2