首页 > 其他分享 >Note Book

Note Book

时间:2023-12-09 12:55:38浏览次数:35  
标签:name views django Note Book user path login

Day 3 Note Book

1.虚拟环境的安装

pip install virtualenv
#镜像安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 安装包```文件
#例如更新pip
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

2.环境安装到 目录

windows r cmd
终端直接 d:
进入其他盘 cd /d d:

# cd 进入到目录下安装虚拟环境
virtualenv xxx --python=python3.9 注释“xxx”是环境名称 一般是与项目名字同名
#通过绝对路径安装
virtualenv xxx/xx/xxx/xx --python=python3.9
注意:用pycharm创建虚拟环境和项目是new一个python file,不是去new django项目。

django 安装命令

pip install django==3.2
cd 到目录
django-admin startproject 项目名称 .  创建项目 加点会加到根目录
python manage.py startapp app01 创建app01
python manage.py runserver 127.0.0.1:8000 启动项目
drf 安装
pip install djangorestframework
添加app
INSTALLED_APPS = [
    # 'django.contrib.admin',
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.messages',
    'django.contrib.staticfiles',
    'oderapp.apps.OderappConfig',
]
oderapp是自己创建的App,oderapp文件夹中apps中的OderappConfig  是一个函数的名字。
了解importlib
import importlib
path="111.222.333.444"
md=importlib.import_module(path)
print(md.age)

md2=getattr(md,"ch")
print(md2)

image-20230622102705623

了解isinstance
isinstance(obj, (list, tuple)) #判断isinstance  patterns 是列表还是元组,返回TRUE FLASE.
使用纯净版本django

image-20230708101647900

image-20230708101700560

正则表达式路由

  • 在django1版本用的多。
  • 在django2+版本用的少

假如:200个功能。

inlucde + app(一般),将功能拆分不到不同的app中。

1.在项目中创建一个apps
2.在apps文件夹创建app文件夹 比如有 api web....
3.终端运行 python manage.py startapp api apps/api  
4.找到api文件下的app中name进行修改
	class ApiConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'apps.api'
    

image-20230824110414000

手动路由分发,可以与app无关。

path('user/add/', views.login),
path('user/delete/', views.login),
path('user/edit/', views.login),
path('user/list/', views.login),


path('user/', ([
                   path('add/', views.login),
                   path('delete/', views.login),   # /user/delete/
                   path('edit/', views.login),
                   path('list/', views.login),
               ], None, None)),

纯粹帮助提取功能的URL,防止重复编写。

小结

  • include或手动元组列表,本质相同。

  • 应用场景和意义,想要把一些URL前缀提取出来。

    path('user/add/', views.login),
    path('user/delete/', views.login),
    path('user/edit/', views.login),
    path('user/list/', views.login),
    
    
    path('user/', ([
                       path('add/', views.login),
                       path('delete/', views.login),   # /user/delete/
                       path('edit/', views.login),
                       path('list/', views.login),
                   ], None, None)),
                   
                   
    path('users', include(([
                               path('add/', views.login),
                               path('delete/', views.login),  # /user/delete/
                               path('edit/', views.login),
                               path('list/', views.login),
                           ], None))),
                           
    include("apps.api.urls")  # 一般是每个app中urls
    urlpatterns = [
    
    ]
    

3.4 name

给一个路由起个名字 + 根据名字反向生成URL。

urlpatterns = [
    path('login/', views.login),
]
# 很多功能,很多URL
urlpatterns = [
    path('login/', views.login, name="v1"),
    path('auth/', views.auth, name="v2"),
]

有了名字后,以后一般有两处会用到:

  • 在视图函数中生成URL

    from django.urls import reverse
    url = reverse("v2")   # /auth/
    url = reverse("v1")   # /login/
    
  • HTML模板,页面上有一个a标签,添加xx。

    <a href="/xxx/xxx/xx/">添加</a>
    
    <a href="{% url 'v1' %}">添加</a>
    <a href="{% url 'v2' %}">添加</a>
    
  • 扩展

    以后做权限管理,让name属性配合。
    
  • 主路由

    namespace写在主路由

    from django.urls import path, re_path, include
    
    # 很多功能,很多URL
    urlpatterns = [
        path('api/', include("apps.api.urls",namespace='x1')),
        path('web/', include("apps.web.urls",namespace='x2')),
    ]
    
  • api/urls.py

    from django.urls import path, re_path
    from . import views
    # 很多功能,很多URL
    urlpatterns = [
        path('login/', views.login,name="login"),
        path('auth/', views.auth, name='auth'),
    ]
    
  • web/urls.py

    from django.urls import path, re_path
    from . import views
    # 很多功能,很多URL
    urlpatterns = [
        path('home/', views.home,name='home'),
        path('order/', views.order,name='order'),
        path('auth/', views.order, name='auth'),
    ]
    

以后再某个URL或者视图中反向生成reverse:

from django.urls import reverse
url = reverse("x1:login")    # /api/login/ 使用reverse将namespace与name 反向生成路由地址
url = reverse("x1:order")    # /web/login/

url = reverse("x1:auth")    # /api/login/
url = reverse("x2:auth")    # /web/login/

两个扩展:

  • namespace需要设置app_name

    urlpatterns = [
        path('api/', include("apps.api.urls", namespace='x1')),
    ]
    
    from django.urls import path, re_path
    from apps.api import views
    
    # 很多功能,很多URL
    urlpatterns = [
        path('login/', views.login, name="login"),
        path('auth/', views.auth, name='auth'),
    ]
    
    app_name = "api"
    
  • 手动分发

添加文件夹

1.删除views新建App内views文件夹。

2.删除主目录下的templates,建App内templates文件夹。

3.新建static文件夹,内部添加plugins cs、js、image、自己的cs,同样也是建在app里面。

4.注册app

INSTALLED_APPS = [
    # 'django.contrib.admin',
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.messages',
    'django.contrib.staticfiles',
    'web.apps.WebConfig'
]

5.连接数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'july_day06',  # 数据库名字
        'USER': 'root',
        'PASSWORD': 'root123',
        'HOST': '127.0.0.1',  # ip
        'PORT': 3306,
    }
}
#连接池
DATABASES = {
    "default": {
        'ENGINE': 'dj_db_conn_pool.backends.mysql',
        'NAME': 'day04',  # 数据库名字
        'USER': 'root',
        'PASSWORD': 'root123',
        'HOST': '127.0.0.1',  # ip
        'PORT': 3306,
        'POOL_OPTIONS': {
            'POOL_SIZE': 10,  # 最小
            'MAX_OVERFLOW': 10,  # 在最小的基础上,还可以增加10个,即:最大20个。
            'RECYCLE': 24 * 60 * 60,  # 连接可以被重复用多久,超过会重新创建,-1表示永久。
            'TIMEOUT':30, # 池中没有连接最多等待的时间。
        }
    }
}
安装 mysql 、mysqlclient与连接池
pip install pymysql
pip install mysqlclient 
pip install django-db-connection-pool
创建models后 运行以下两步完成创建表在mysql
python manage.py makemigrations
python manage.py migrate

mysql 基础命令

创建 数据库 CREATE DATABASE 名字;

show database show tables

redis 安装

  • 服务器 + redis安装启动

  • django

    • 安装连接redis包

      pip install django-redis
      
    • settings.py

      CACHES = {
          "default": {
              "BACKEND": "django_redis.cache.RedisCache",
              "LOCATION": "redis://127.0.0.1:6379",
              "OPTIONS": {
                  "CLIENT_CLASS": "django_redis.client.DefaultClient",
                  "CONNECTION_POOL_KWARGS": {"max_connections": 100}
                  # "PASSWORD": "密码",
              }
          }
      }
      
    • 手动操作redis

      from django_redis import get_redis_connection
      
      conn = get_redis_connection("default")
      conn.set("xx","123123")
      conn.get("xx")
      

mysql更改执行路径

image-20230716174935620

models如果是choices项的,在html中这样体现
{% for row in queryset %}
<td>{{ row.get_department_display }}</td>
{% end for %}
重点是 get_表名字_display
视图函数的另一种保存方式
 # 两种方式都可以储存
   1# Market = models.Market(department=dpt, name=name, password=pas, phone_number=phone)
    Market.save()
  2  # models.Market.objects.create(department=dpt, name=name, password=pas, phone_number=phone)
  
在项目中的 models.py 中添加以下类:

class Book(models.Model):
    id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入
    title = models.CharField(max_length=32) # 书籍名称
    price = models.DecimalField(max_digits=5, decimal_places=2) # 书籍价格
    publish = models.CharField(max_length=32) # 出版社名称
    pub_date = models.DateField() # 出版时间
中间件
#utls/md
from django.utils.deprecation import MiddlewareMixin
from django.conf import settings
from django.shortcuts import redirect

class UserInfo(object):
    def __init__(self, name,row, id):
        self.id = id
        self.name = name
        self.row=row
        self.menu_name = None
        self.text_list = []


class AuthMiddleware(MiddlewareMixin):
    def is_white_url(self, request):
        # 1.在白列表中的网站 直接跳过
        if request.path_info in settings.NB_WHITE_URL:
            return True

    def process_request(self, request):
        # 1.在白列表中的网站 直接跳过
        if self.is_white_url(request):
            return
        # 获取session中的信息,能获取到登录
        #  {'role': mapping[role], 'name': user_object.username, 'id': user_object.id}
        user_dict = request.session.get(settings.NB_SESSION_KEY)
        # 没有获取 就返回登录
        if not user_dict:
            return redirect(settings.NB_LOGIN_URL)
        print(user_dict, type(user_dict))
        # 已登录,封装用户信息
        request.nb_user = UserInfo(**user_dict)
        print(request.nb_user)
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print("chuqu")

##############简要###################################
process_request,基于他实现用户是否已登录,继续;未登录则返回登录界面。
	- return None,继续向后访问
	- return 对象,直接返回。
	
process_view,权限校验
	- return None,继续向后访问
	- return 对象,直接返回。
	- 在他的request对象中有 resolver_match  ,包含当前请求的视图路由信息  .name->sms_login
		admin = ['sms_login',"xxx"]
	
process_response
#settings/
NB_MENU = {
    "PURCHASE": [
        {
            "tetx": "用户信息",
            "icon": "fa-bed",
            "children": [
                {'text': "订单列表", 'url': "/market_list/", 'name': "level_list"}
            ]
        },
    ],
    'MARKET': [
        {
            'text': "用户信息",
            'icon': "fa-bed",
            'children': [
                {'text': "级别管理", 'url': "/level/list/", 'name': "level_list"}
            ]
        },
    ],

}

#menu.py
from django.template import Library
import copy
from django.conf import settings

register = Library()


@register.inclusion_tag("tag/nb_menu.html")
def nb_menu(request):
    user_menu_list = copy.deepcopy(settings.NB_MENU[request.nb_user.row])
    for item in user_menu_list:

        for child in item['children']:
            if child['name'] == request.nb_user.menu_name:
                child['class'] = 'active'

    return {'menu_list': user_menu_list}


#templates/tag/nb_user
<div class="multi-menu">
    {% for item in menu_list %}
        <div class="item">
            <div class="title">
                <span class="icon-wrap"><i class="fa {{ item.icon }}"></i></span> {{ item.text }}
            </div>
            <div class="body {{ item.class }}">
                {% for child in item.children %}
                    <a class="{{ child.class }}" href="{{ child.url }}">{{ child.text }}</a>
                {% endfor %}
            </div>
        </div>
    {% endfor %}
</div>


#要导入的HTML文件
{% load menu %}
{% nb_menu request %}
中间件权限设置
    def process_view(self, request, callback, callback_args, callback_kwargs):
        if self.is_white_url(request):
            return
        current_name = request.resolver_match.url_name
        # 0.是否是公共权限
        if current_name in settings.NB_PERMISSION_PUBLIC:
            return
        # 1.根据用户角色获取自己具备所有的权限

        user_permission_dict = settings.NB_PERMISSION[request.nb_user.row]
        # 2.获取当前用户访问的URL
        current_name = request.resolver_match.url_name
        print(current_name)
        # 3.判断是否在自己具备的权限
        if current_name not in user_permission_dict:
            return HttpResponse("无权访问")
        # 4.有权限  就设置路径显示
        text_list = []
        text_list.append(user_permission_dict[current_name]["text"])
        # 5.有权限的路径导航
        menu_name = current_name
        while user_permission_dict[current_name]['parent']:
            menu_name = user_permission_dict[menu_name]['parent']
            text = user_permission_dict[menu_name]['text']
            text_list.append(text)

            text_list.append("首页")
            text_list.reverse()
            # 4.1 当前菜单的值
            request.nb_user.menu_name = menu_name

            # 4.2 路径导航
            request.nb_user.text_list = text_list

            print(text_list)
html 要写的路径代码
<ol class="breadcrumb">
    {% for text in request.nb_user.text_list %}
        <li><a>{{ text }}</a></li>
    {% endfor %}
</ol>

云服务器linx

pwd 查看目录

git 查看是否下载git

yum install git 下载git

git clone http://gitee.com/baixue888/order.git 上传

ls 查看是否order文件夹

cd order/ 进入目录

ls 查看文件内容

如果有修改git仓库代码 执行 git pull origin master

在git bash操作

ssh [email protected]

rm -rf order/ 在linx删除文件夹

git remote -v 查看git 远程源地址

git remote rm origin 删除所有远程地址

insert into mysql.user(user,host,password) values('baixuejie','%',password('baixuejie123!'));

标签:name,views,django,Note,Book,user,path,login
From: https://www.cnblogs.com/bxj123/p/17881106.html

相关文章

  • Kernel Maintainer Handbook 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/maintainer/index.htmlKernelMaintainerHandbook这份文档是为内核维护者编写的指南的谦逊开端。这里还有很多工作要做!请随时提出(并编写)对这份指南的补充。功能和驱动程序维护者责任选择维护者不遵守规定配置Git创建提交链......
  • python notebook
    python(11.20--12.7)配置python环境:下载:anaconda在清华大学开源软件镜像站中选择合适的镜像进行下载。anaconda的存在和作用:要使用anaconda不妨先了解anaconda是什么,做什么。首先要知道,anaconda的存在必然有其存在的社会条件,现如今的python拥有众多版本,他们可以满足使用者不......
  • Facebook获客脚本编写教程
    在当今的数字化时代,社交媒体成为了人们获取信息、交流和娱乐的重要平台,Facebook作为全球最大的社交媒体平台之一,拥有数十亿的用户,为企业提供了无限的商业机会。然而,如何在Facebook上获取客户并引导他们到自己的网站或产品页面是一项具有挑战性的任务,为了解决这个问题,我们可以使用Fa......
  • P6入门:项目初始化3-项目详情之记事本Notebook
    前言使用项目详细信息查看和编辑有关所选项目的详细信息,在项目创建完成后,初始化项目是一项非常重要的工作,涉及需要设置的内容包括项目名,ID,责任人,日历,预算,资金,分类码等等,在接下来的博文中,我将结合官方帮助介绍这些基本设置,希望给对P6感兴趣的人带来帮助。涉及P6 项目详情设置包括:G......
  • EndNote如何显示论文中国作者名字第二个字的拼音?
      本文介绍利用EndNote软件,对论文参考文献中英文文献的汉语拼音姓名(即含有中国作者的英文论文)的名的第二个字的首写字母加以补充显示。  例如,假如有如下一篇文章:  可知其第一作者的姓为Kong,名为Xiangbin,很显然,该作者除了姓之外的名共有两个字。假如,我们现在希望出现在参考......
  • jupyter notebook代码补全扩展安装遇到 Jupyter command `jupyter-contrib` not found
    Jupytercommandjupyter-contribnotfound.解决方案——新的安装方式。方法1:pip方式1.先使用以下命令,卸载旧版本的jupyter_contrib_nbextensions和upyter_nbextensions_configurator:分别用cmd命令,卸载之前的安装pipuninstalljupyter_contrib_nbextensionspipuninsta......
  • 使用技巧 | 红米 Redmi Note 12 Turbo优化记录(去广告等)
    原文链接:https://engapi.com/article/7569原文也是我写的。我的红米Redminote8pro6+128已有些卡顿,遂在K70推出之际下单了RedmiNote12Turbo16+1T当备机。以下记录红米Note12Turbo去广告和优化过程,小米/红米系列都可参考。1.去广告系统设置参考这里:小米/红米手机如何......
  • Note - 整体二分
    其实是做题做不动了然后也不想卷whk于是跑来写这个。正式完工估计要咕咕咕了。多组询问,对于单组询问可以二分,但是每组暴力二分又会T,而且又可以离线,修改可以根据\(mid\)分到某一边,修改对询问的贡献有结合律、交换律时,可以考虑整体二分。即定义函数\(solve(l,r,pt)\)表......
  • Facebook短信多发脚本真好用,你会写吗?
    随着社交媒体的普及,越来越多的企业开始利用Facebook等社交平台进行营销和推广。然而,如何在Facebook上有效地发送信息,提高客户满意度和忠诚度,成为了企业面临的重要问题,这时,Facebook信息群发脚本应运而生,为企业解决了一系列问题。一、什么是Facebook信息群发脚本?Facebook信息群发脚......
  • Facebook消息多发工具功能介绍
    在当今的数字化时代,社交媒体已成为人们日常生活中的重要组成部分,对于企业和营销人员来说,如何有效地利用社交媒体平台来提高品牌知名度、扩大市场份额以及与目标客户建立良好的关系,成为了他们面临的重要问题。Facebook作为全球最大的社交网络之一,为企业提供了一个广阔的舞台,而Facebo......