Django
以下记录自己学习django,大佬请无视就好,跟我一样的小白,看也无妨,但是不保证对!
使用的是django2.2
1创建项目:
django-admin.py startproject xxxx # xxx为项目名字
django-admin.py startapp xxxx # xxx为app名字
python manage.py runserver # 启动项目
2修改setting.py
先修改最后的时间
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
注册App
# 应用列表 创建的应用都要在这儿注册以哈
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel',
]
创建模板地址要在setting.py 内进行注册
# 模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [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',
],
},
},
]
静态文件
STATIC_URL = '/static/' # 使用时前缀是什么?
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "statics"),
]
STATIC_ROOT = '/home/sychen/xxx' # 在部署的时候要把静态文件交给nginx管理
# 使用python manage,py collectstatic /hoem/sychen/xxx 收集所有的静态文件
文件目录
.
├── db.sqlite3
├── HelloWorld
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py # 配置文件
│ ├── urls.py # Django 项目的 URL 声明
│ ├── views.py # 视图函数
│ └── wsgi.py # 定义django用什么socket wssgiref 或者uwsgi
├── manage.py # 操作工具
├── statics # 自己创建,也可以在其他地方创建,要修改setting.py
│ ├── css
│ ├── images
│ ├── js
│ └── plugins
├── templates
└── TestModel
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ ├── __init__.py
├── models.py # 操作数据库
├── tests.py
├── urls.py # App内的路由文件,需要自己创建,直接把主项目的粘过来修改就行
└── views.py # App内的视图函数文件
3修改路由文件
创建了App之后,要在主项目下urls.py将App与主urls.py文件链接起来,如下:
# project/urls.py
from django.contrib import admin
from . import views
from django.urls import include,path
urlpatterns = [
path('admin/',admin.site.urls),
# 在此包含子路由
# 先在每个app里创建子路由文件 urls.py
# 路由前缀 user/
path('user/',include('App_name.urls'))
]
函数 path() 具有四个参数,两个必须参数:route 和 view,两个可选参数:kwargs 和 name。
routh : 匹配 URL
view : 定义的视图函数
kwargs : 任意个关键字参数可以作为一个字典传递给目标视图函数
name:
4urls.py 和view.py
urls.py和views.py,
urls.py负责接受网页的访问,然后调用view.py 内的视图函数。
其中有 request 实例,负责接受网页传来的get和post消息。
也可以设置redirect() 跳转,重定向
class HttpRequest:
"""A basic HTTP request."""
class HttpResponse(HttpResponseBase):
"""
An HTTP response class with a string as content.
This content that can be read, appended to, or replaced.
"""
# render
def render(request, template_name, context=None, content_type=None, status=None, using=None):
"""
Return a HttpResponse whose content is filled with the result of calling
django.template.loader.render_to_string() with the passed arguments.
"""
content = loader.render_to_string(template_name, context, request, using=using)
return HttpResponse(content, content_type, status) # render 依然返回的是HttpResponse
以下说明HttpResponse的方法和属性:
request的常用属性
GET:GET 请求体内的东西
POST: POST请求体里面的东西
methon:方法
PATH:
scheme:
其他请求属性:META 都在这里面
客户端地址: META.get('REMOTE_ADDR')
常用方法:
get_host()
get_full_path()
bulid_absolute_url()
request.GET.dist()
设计模型(就是操作数据库)
python manage.py migrate #
# app_name/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__()
return ...
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__()
return ...